簡體   English   中英

MySQL根據兩個日期列之間的結果選擇行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM