2013-07-03 1 views
0

Задерживается в течение нескольких дней. хотите группировать результирующий набор sql по историческим датам. так что хотите, чтобы результат был сгруппирован по дате с каждой даты в указанном диапазоне до конца во времени. Вот мой sql до сих пор, но он группирует результат по дате вместо исторической даты.Группа по исторической дате для каждой даты в указанном диапазоне

Пожалуйста, помогите!

SELECT ledger.transdate, 
sum(case when transcodes.dtcr = 'C' then ledger.amount else 0 end) Credit, 
sum(case when transcodes.dtcr = 'D' then ledger.amount else 0 end) Debit, 
sum(case when transcodes.dtcr = 'C' then ledger.amount else 0 end) - 
sum(case when transcodes.dtcr = 'D' then ledger.amount else 0 end) Balance 
FROM 
    LEDGER 
    INNER JOIN TRANSCODES ON (LEDGER.TRANSCODE = TRANSCODES.TRANSCODE) 
where ledger.transdate >= '2013-02-28' and ledger.transdate <= '2013-03-01' 
group by ledger.transdate 
+2

Пожалуйста, вы можете уточнить, что вы имеете в виду по исторической дате против даты –

+1

Что вы подразумеваете под «исторической датой»? – athabaska

+0

группа по сумме записей с 2013-02-28 по пути назад, некоторые записи с 2013-02-29 назад, некоторые записи с 2013-03-01 на всем пути назад и т. Д. – user2545320

ответ

0

Может быть, рассмотреть этот пример ...

SELECT * FROM ints; 
+---+ 
| i | 
+---+ 
| 0 | 
| 1 | 
| 2 | 
| 3 | 
| 4 | 
| 5 | 
| 6 | 
| 7 | 
| 8 | 
| 9 | 
+---+ 

SELECT x.i, SUM(y.i) running FROM ints x JOIN ints y ON y.i <= x.i GROUP BY i; 
+---+---------+ 
| i | running | 
+---+---------+ 
| 0 |  0 | 
| 1 |  1 | 
| 2 |  3 | 
| 3 |  6 | 
| 4 |  10 | 
| 5 |  15 | 
| 6 |  21 | 
| 7 |  28 | 
| 8 |  36 | 
| 9 |  45 | 
+---+---------+ 
0

Если я правильно вас понял, и вы хотите сгруппировать по дате-только часть поля transdate, вы можете использовать функцию Date(), т.е. ... группа по дате (transdate)