2016-12-29 105 views
0

我下面的表格有mysql的獲取日期之間唯一的記錄與特定的順序

id | item_id | start_date | end_date | disc_percent 
    1 | 1  | 2016-12-27 | 2016-12-31 | 50 
    2 | 2  | 2016-12-27 | 2016-12-31 | 50 
    3 | 3  | 2016-12-27 | 2016-12-31 | 50 
    4 | 137  | 2016-12-27 | 2016-12-31 | 50 
    5 | 1  | 2016-12-28 | 2016-12-29 | 10 

和我運行此查詢:

SELECT * 
from onsale 
WHERE (CURDATE() BETWEEN onsale.start_date 
         AND onsale.end_date) 
order by onsale.start_date DESC, 
     onsale.end_date ASC 

我想唯一的每個ITEM_ID的第一個記錄像這樣:

id | item_id | start_date | end_date | disc_percent 
    5 | 1  | 2016-12-28 | 2016-12-29 | 10 
    2 | 2  | 2016-12-27 | 2016-12-31 | 50 
    3 | 3  | 2016-12-27 | 2016-12-31 | 50 
    4 | 137  | 2016-12-27 | 2016-12-31 | 50 

我怎樣才能得到這個結果? 感謝您的幫助

+3

可能的複製[ROW \ _NUMBER()in MySQL](http://stackoverflow.com/questions/1895110/row-number-in-mysql) –

+2

[Get top n re每組分組結果](http://stackoverflow.com/questions/12113699/get-top-n-records-for-each-group-of-grouped-results) – shmosel

+0

只讀通過推薦的答案,我不要解開它們 –

回答

2

爲了得到獨一無二的紀錄ITEM_ID,你應該子句中使用組。 group by子句返回表的唯一行。

的查詢會是這樣 -

SELECT * 
from onsale 
WHERE (CURDATE() BETWEEN onsale.start_date 
         AND onsale.end_date) group by item_id 
order by onsale.start_date DESC, 
     onsale.end_date ASC 
+0

group by不提供我期望的結果 –

+0

你想要的結果與你在上面的表格中提到的一樣,並且表格的記錄將被修復? –

+0

'ASC'是可選 – denny

0

試試這個...不需要聚合函數...

select * from (select * from onsale order by start_date desc) onsale group by item_id; 

支票sqlfiddle: - http://sqlfiddle.com/#!9/218a1/1

+0

感謝denny你的答案工作很好的小提琴,但我不明白爲什麼它不能在我的服務器上工作,我注意到的唯一不同的事情是mysql版本小提琴= 5.6我的服務器= 5.7。有任何想法嗎? –

+0

@ALDI我也嘗試過5.7.successfully execute.there沒有任何問題。這裏檢查http://rextester.com/SVGEOV26849 – denny

+0

@ALDI只有日期不同的兩個結果因爲你忽略end_date這是過去,今天是30dec。 – denny

相關問題