Я использую PostgreSQL-10.5.У меня есть две таблицы для создания отчета.Мне нужно сделать некоторые вычисления, используя столбцы ilkokuma
(первое чтение) и sonokuma
(последнее чтение).
Я мог бы делать вычисления до определенного момента.Я буду добавлять еще.Я не мог понять, как я могу join
одной таблицы в одном SQL и пытался использовать два использования union
.Ниже приведен мой текущий SQL, который я пытаюсь объединить в обоих вычислениях.
SELECT
faturadata.*,
(SELECT DATE_PART('days', DATE_TRUNC('month', ilkokuma) + '1 MONTH'::INTERVAL - '1 DAY'::INTERVAL)) as ilkokuma_gun_sayisi,
sabityanma.deger as ilkokuma_deger,
(SELECT DATE_PART('days', DATE_TRUNC('month', ilkokuma) + '1 MONTH'::INTERVAL - '1 DAY'::INTERVAL)) * sabityanma.deger as ilkokuma_carpim,
null as sonokuma_gun_sayisi,
null as sonokuma_deger,
null as sonokuma_carpim
FROM
faturadata
left join sabityanma on sabityanma.yil = date_part('year', ilkokuma) and sabityanma.ay = date_part('month', ilkokuma)
union
SELECT
faturadata.*,
null as ilkokuma_gun_sayisi,
null as ilkokuma_deger,
null as ilkokuma_carpim,
(SELECT DATE_PART('days', DATE_TRUNC('month', sonokuma) + '1 MONTH'::INTERVAL - '1 DAY'::INTERVAL)) as sonokuma_gun_sayisi,
sabityanma.deger as sonokuma_deger,
(SELECT DATE_PART('days', DATE_TRUNC('month', sonokuma) + '1 MONTH'::INTERVAL - '1 DAY'::INTERVAL)) * sabityanma.deger as sonokuma_carpim
FROM
faturadata
left join sabityanma on sabityanma.yil = date_part('year', sonokuma) and sabityanma.ay = date_part('month', sonokuma)
И результат равен
id tesisat trf kwh tahakkuk ilkokuma sonokuma ilkokuma_gun_sayisi ilkokuma_deger ilkokuma_carpim sonokuma_gun_sayisi sonokuma_deger sonokuma_carpim
2023772 4024546 400 1765 2016-08-31 2016-07-31 2016-08-31 31 9 279
2023772 4024546 400 1765 2016-08-31 2016-07-31 2016-08-31 31 11 341
2023773 4024545 400 3876 2016-08-31 2016-07-31 2016-08-31 31 9 279
2023773 4024545 400 3876 2016-08-31 2016-07-31 2016-08-31 31 11 341
2023774 4024543 400 2126 2016-08-31 2016-07-31 2016-08-31 31 9 279
2023774 4024543 400 2126 2016-08-31 2016-07-31 2016-08-31 31 11 341
Как видно, SQL дублирует записи.Мне нужно иметь одну запись для обоих вычислений.
Я не мог понять, как я могу это сделать.