[英]MySQL select rows based on a result between two date columns
我有一張這樣的桌子:
id | Type | Date | DocDate
------------------------------
1 | A | 2014-04-05 | 2014-04-05
2 | A | 2014-05-06 | 2014-05-08
3 | B | 2014-06-06 | 2014-06-06
我需要創建一個堆疊的bar char。 但是要做到這一點,我需要將表轉換為:
Type | Green | Red
-----------------------
A | 1 | 1
B | 1 | 0
其中綠色和紅色表示以下條件的結果:
IF (DocDate - Date) <= 1 THEN Green
IF (DocDate - Date) > 1 THEN Red
我試過這個查詢:
SELECT CASE
WHEN (DocDate - Date) <= 1 THEN 'Green'
WHEN (DocDate - Date) > 1 THEN 'Red'
END AS X, Count(OccurrenceID) AS Total
FROM tbloccurrence
GROUP BY CASE
WHEN (DocDate - Date) <= 1 THEN 'Green'
WHEN (DocDate - Date) > 1 THEN 'Red'
END;
但是結果不是我所需要的。 有誰能夠幫助我?
我從編寫查詢開始,該查詢從表中拉出每一行,並分配綠色或紅色列。 為此,您可以使用IF()
語句。 這需要3個參數:條件,條件為真時該怎么辦以及條件為假時該怎么辦。 這給了我們這個:
SELECT type, IF(DATEDIFF(docdate, dateCol) <= 1, 1, 0) AS green, IF(DATEDIFF(docdate, dateCol) > 1, 1, 0) AS red
FROM myTable;
我還使用了DATEDIFF()
函數。 這將返回兩個參數之間的整數天數(需要DATE或DATETIME參數)。
然后,我只對紅色和綠色列求和,並按類型分組以匹配您的結果集:
SELECT type, SUM(IF(DATEDIFF(docdate, dateCol) <= 1, 1, 0)) AS green, SUM(IF(DATEDIFF(docdate, dateCol) > 1, 1, 0)) AS red
FROM myTable
GROUP BY type;
這是您的免費SQL Fiddle 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.