這是一個我正在查詢的問題,但對我來說感覺非常低效,我希望能幫助構建一個更好的問題。這將進入實時生產環境,db每天處理的查詢數量非常高,因此效率越高越好。我有一個表的結構是這樣的(剝離只是相關部分):從分組行中的同一列中獲取特定值
id | type | datecolumn
1 | A | 2014-01-01
1 | B | 0000-00-00
2 | A | 2014-01-02
2 | B | 2014-01-10
3 | A | 2014-01-01
3 | B | 0000-00-00
總是會有每個ID兩行,A型的一個和類型的一個B. A將始終有一個有效的日期,而B將有一個日期> = A的日期,或全部爲0。我要的是,這將產生類似輸出的查詢:
id | date for A | date for B
1 | 2014-01-01 | None
2 | 2014-01-02 | 2014-01-10
3 | 2014-01-01 | None
現在我這樣做的方法如下:
SELECT
id,
IF(MIN(datecolumn) > 0, MIN(datecolumn), MAX(datecolumn)) AS 'date for A',
IF(MIN(datecolumn) > 0, MAX(datecolumn), 'None') AS 'date for B'
GROUP BY id
但它確實感覺我應該能夠以某種方式按類型摘取日期列值。我知道最簡單的解決方案應該是改變表結構,以便每個id只使用一行,但恐怕在這種情況下是不可能的;必須有兩排。有沒有在這個查詢中正確利用類型列的方法?
編輯此外,這是一個將有超過10,000,000行的表上。再一次,效率是關鍵。
我想這就是我該怎麼做的。 – Strawberry