類似的問題已經問多次,但沒有一個答案在這種情況下幫助,所以問的問題再次SQL查詢返回重複行與參加
我有這個結構如下表(是不是唯一的密鑰這裏):
---------------------------------------------------------------
|a_number | a_status | b_status | ref_id | timepublished |
|(text) | (text) | (text) |(text) | (datetime) |
---------------------------------------------------------------
|1 | U | U | re1 | 2016-08-12 13:24:25 |
|1 | P | U | re1 | 2016-08-12 13:24:35 |
|1 | P | P | re1 | 2016-08-12 13:24:45 |
|2 | U | U | re2 | 2016-08-12 12:24:30 |
|2 | U | F | re1 | 2016-08-12 12:24:45 |
|4 | U | U | re3 | 2016-08-12 13:24:30 |
|4 | U | U | re4 | 2016-08-13 15:24:30 |
---------------------------------------------------------------
現在我想解決的問題是獲得每個a_number的最新狀態。所以,正確的輸出應該是:
---------------------------------------------------------------
|1 | P | P | re1 | 2016-08-12 13:24:45 |
|2 | U | F | re1 | 2016-08-12 12:24:45 |
|4 | U | U | re3 | 2016-08-12 13:24:30 |
|4 | U | U | re4 | 2016-08-13 15:24:30 |
---------------------------------------------------------------
和查詢我的是:
SELECT af.a_number
, af.a_status
, af.b_status
, af.ref_id
, af.timepublished
FROM af_biz af
JOIN
(SELECT MAX(timepublished) timepublished, ref_id
FROM af_biz GROUP BY ref_id) tmp
ON tmp.timepublished = af.timepublished AND tmp.ref_id = af.ref_id
ORDER BY af.a_number;
但結果我得到遏制這樣的不正確的輸出(注意,時間是最大timepublished但狀態是不同的):
---------------------------------------------------------------
|1 | P | U | re1 | 2016-08-12 13:24:45 |
|1 | P | P | re1 | 2016-08-12 13:24:45 |
|2 | U | U | re2 | 2016-08-12 12:24:45 |
|2 | U | F | re1 | 2016-08-12 12:24:45 |
|4 | U | U | re3 | 2016-08-12 13:24:30 |
|4 | U | U | re4 | 2016-08-13 15:24:30 |
---------------------------------------------------------------
任何人有任何想法可能是我的查詢錯?
你需要做的'GROUP BY af.a_number' – Sovon
@Sovon,這是無效的GROUP BY - 不允許在較新版本的MySQL ... – jarlh
@Sovon,即使它是有效的,也不應該這樣做......在MySQL中起作用的MySQL擴展提供了擴展,但不能在任何其他RDBMS中工作。 – Rahul