[英]MySQL grouping results by specific field
我有一個名為“ test”的表,如下所示:
id | location_id | date
1 | 1 | 2017-01-02
2 | 1 | 2017-01-03
3 | 2 | 2017-01-04
4 | 1 | 2017-01-05
我想要一個SELECT語句,該語句為每個location_id選擇一行並按日期排序。
由於ONLY_FULL_GROUP_BY的要求(以及其他數據庫的類似嚴格標准),我的特定問題是創建一條適用於MySQL 5.7.1及更高版本的語句。
SELECT id, location_id , date FROM test GROUP BY location_id ORDER BY date
可以,但是在升級MySQL數據庫的那天無效。
SELECT id, location_id , date FROM test GROUP BY location_id, id, date ORDER BY date
有效,但不起作用,它將返回所有結果。
我想要的是獲得上面第一個SELECT查詢的結果,但是要使用有效的SQL,它可以滿足未來的需求,它返回:
id | location_id | date
1 | 1 | 2017-01-02
3 | 2 | 2017-01-04
任何幫助或見解如何解決這個贊賞!
根據您提供的樣本數據,您要執行以下操作:
SELECT MIN(id) AS ID,
Location_ID,
MIN(Date) AS Date
FROM test
GROUP BY Location_ID
ORDER BY Date
我們已將匯總函數應用於id和date,因此您只需要在分組依據中保留location_id。 並且在相同的數據上,您似乎只選擇了最小的ID-日期。 這可能是一個誤導性的假設,所以讓我知道
編輯
根據我們的聊天,我提出了以下建議:
SELECT id, location_id, Date
FROM (
SELECT t1.*,
@cur := IF(location_id = @id, @cur+1, 1) AS RowNumber,
@id := location_id AS IdCache
FROM docs t1
CROSS JOIN (
SELECT @id:=(SELECT MIN(location_id) FROM docs), @cur:=0) AS init
ORDER BY t1.location_id, date
) PartitionedData
WHERE RowNumber = 1
order by location_id
我所做的是復制MSSQL's ROW_NUMBER()
並在location_id
分區。 為了更好地了解該功能,請在此處閱讀
給定以下示例數據:
1 | 1 | 2017-01-02
2 | 1 | 2017-01-03
3 | 2 | 2017-01-04
4 | 1 | 2017-01-05
視圖PartitionedData
將返回以下數據集:
id | location_id | date | RowNumber | IdCache
1 | 1 | 2017-01-02 | 1 | 1
2 | 1 | 2017-01-03 | 2 | 1
4 | 1 | 2017-01-05 | 3 | 1
3 | 2 | 2017-01-04 | 1 | 2
“分區”基於我們選擇的@id,然后根據我們的排序。 如果我們將順序更改為t1.location_id, date desc
則我們的數據集將為:
id | location_id | date | RowNumber | IdCache
4 | 1 | 2017-01-05 | 1 | 1
2 | 1 | 2017-01-03 | 2 | 1
1 | 1 | 2017-01-02 | 3 | 1
3 | 2 | 2017-01-04 | 1 | 2
因此,根據我們訂購日期的方式,我們可以選擇最新的日期或第一次的日期-您必須在php中處理asc / desc。
最后,我們返回的數據將與ID一致,因此上述查詢將輸出:
id | location_id | date
1 | 1 | 2017-01-02
3 | 2 | 2017-01-04
讓我知道這是否更接近您要尋找的東西!
SELECT DISTINCT是否滿足您的需求?
SELECT DISTINCT id, location_id , date FROM test GROUP BY location_id, id, date ORDER BY date
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.