2017-02-21 170 views
1

我需要查詢顯示某段時間的所有日期(例如從2017年1月1日 - 2017年12月12日),然後爲每個日期那天我需要顯示插入它的客戶在當天插入的行數。顯示當天的所有日期範圍並顯示當天的行數

因此,例如,我有這個表:

+------------+------------+-----------+ 
| customerId | Date | Message | 
+------------+------------+-----------+ 
|   1 | 01/01/2017 | Message 1 | 
|   1 | 01/01/2017 | Message 2 | 
|   1 | 01/01/2017 | Message 3 | 
|   2 | 01/01/2017 | Message 1 | 
|   2 | 01/01/2017 | Message 2 | 
|   1 | 02/01/2017 | Message 3 | 
|   1 | 02/01/2017 | Message 4 | 
|   2 | 03/01/2017 | Message 3 | 
+------------+------------+-----------+ 

結果應該是這樣的:

+------------+------------+----------+ 
| Date | customerId | messages | 
+------------+------------+----------+ 
| 01/01/2017 |   1 |  3 | 
| 01/01/2017 |   2 |  2 | 
| 02/01/2017 |   1 |  2 | 
| 02/01/2017 |   2 |  0 | 
| 03/01/2017 |   1 |  0 | 
| 03/01/2017 |   2 |  1 | 
+------------+------------+----------+ 

我已經有這個疑問:

SELECT TRUNC (SYSDATE + ROWNUM, 'DD') as dt 
FROM DUAL CONNECT BY ROWNUM < 12 

,給了我一個表中x日期的日期範圍(在本例中爲12)。我已經試過用這個DUAL表(LEFT JOIN和JOIN)加入我的表,但它並沒有給我我需要的結果。

編輯:我剛發現我可以用CROSS JOIN顯示所有日期。

+0

我刪除了MySQL標籤的語法看起來像甲骨文。 –

+0

哦,是的,對不起,這是建議。 –

+0

我剛剛發現我可能需要'CROSS JOIN' –

回答

2

我終於得到它的工作:

SELECT * 
FROM (SELECT DAT.*, V.ID, V.NAME 
    FROM (SELECT TRUNC ((SYSDATE - 22) + ROWNUM, 'DD') as dt 
    FROM DUAL CONNECT BY ROWNUM <= 4) DAT CROSS JOIN (SELECT ID, NAME FROM ORGANISATIONS) V) DATES 
LEFT JOIN 
(SELECT OGE_ID, TRUNC(REGISTRATIONDATE) AS roundday, COUNT(*) FROM ZAKEN GROUP BY TRUNC(REGISTRATIONDATE), OGE_ID) CASES 
ON DATES.DT = CASES.roundday AND DATES.ID = CASES.OGE_ID; 
0

從表中例如:

select Date, customerId, count(messages) from tablename group by Date, customerId; 

會給你想要的結果

+0

這不會給我沒有結果的日期。 –

相關問題