๋น์ด์๋ ๋ ์ง ๋ฐ์ดํฐ๋ฅผ ์ฑ์ฐ๋ ๋ฐฉ๋ฒ
ํ๊ตญ์ ๋ ฅ์ ์ ๊ธฐ์๊ธ์ ๊ฒ์นจ์ผ ๊ธฐ์ค์ผ๋ก ์ ์ฒญ๊ตฌ์๊ธ์ด ๊ณ์ฐ๋๋ค๊ณ ํ๋ค. ๋ง์ฝ, ์ผ๋ณ ์๊ธ ์ ๋ณด๊ฐ ์กด์ฌํ ๋ ๋น ์ ธ์๋ ์ผ์๋ฅผ ์ฑ์ฐ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
์๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค SQL, ๊ทธ๋ฆฌ๊ณ ์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ์ค์์ ์์๋ณด๋๋ก ํ์.
์๋ฐ ์ฝ๋์์ ๋น ์ง ๋ ์ง๋ฅผ ์ฑ์ฐ๊ธฐ
List<Billing> billingList = new ArrayList<>();
billingList.add(Billing.of(LocalDate.parse("2025-07-10")).setBill(0).calVat());
billingList.add(Billing.of(LocalDate.parse("2025-07-11")).setBill(50).calVat());
billingList.add(Billing.of(LocalDate.parse("2025-07-12")).setBill(25).calVat());
LocalDate startDate = LocalDate.parse("2025-07-10");
LocalDate endDate = LocalDate.parse("2025-08-09");
Set<LocalDate> billDates = billingList.stream().map(Billing::getBillDate).collect(Collectors.toSet());
Set<LocalDate> dates = startDate.datesUntil(endDate.plusDays(1L)).collect(Collectors.toSet());
for (LocalDate date : dates) {
if (!billDates.contains(date)) {
billingList.add(Billing.of(date));
}
}
PostgreSQL์์ ๋น ์ง ๋ ์ง๋ฅผ ์ฑ์ฐ๊ธฐ
SELECT
d::date AS bill_date,
COALESCE(s.bill, 0) AS bill,
COALESCE(s.vat, 0) AS vat
FROM
generate_series('2025-07-10'::date, '2025-08-09'::date, '1 day') d
LEFT JOIN
billing s ON s.bill_date = d::date
ORDER BY
d;
KDB+ ์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋น ์ง ๋ ์ง๋ฅผ ์ฑ์ฐ๊ธฐ
n:11;
dates: ([] bill_date: {x +til y-x}[2025.07.10;2025.08.09]);
billing: `bill_date xkey ([] bill_date: n?dates`bill_date; bill: n?100; vat: n?0.0f);
result: update bill:0^bill, vat:0^vat from dates lj billing;
๊ทธ๋ฐ๋ฐ, ๋ง์ฝ ์ผ๋ณ ์๊ธ ์ ๋ณด๊ฐ ๋ค์์ ๊ณ ๊ฐ๋ค์ด ํจ๊ป ํฌํจ๋๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ์ง???