[英]SQL - How to get result based on MAX date and GROUP BY
我想獲得最大的created_at
和每個application_id
組的結果。 以下是數據示例,
application_id | checkpoint_id | created_at
1 | 260 | 2018-12-28 11:54:52
11 | 259 | 2018-12-24 18:16:30
11 | 260 | 2018-12-26 17:48:58
12 | 260 | 2018-12-26 17:48:58
12 | 261 | 2018-12-26 18:00:00
我想要的結果僅適用於checkpoint_id = 260
。 例如,上面我想要的結果是application_id
。 1&11。
我嘗試過的查詢
SELECT * FROM histories h
WHERE `checkpoint_id` = 260
AND created_at = (
SELECT MAX(`created_at`)
FROM histories
GROUP BY h.application_id, h.checkpoint_id
)
結果
application_id | checkpoint_id | created_at
1 | 260 | 2018-12-28 11:54:52
我期望獲得ID號為1和11的2行。有沒有辦法做到這一點。
最新查詢更新
只是為了更新我為獲得預期結果而實現的最新查詢。 查詢如下
SELECT * FROM (
SELECT application_id, checkpoint_id, created_at
FROM histories
GROUP BY application_id, checkpoint_id
) AS h
WHERE h.checkpoint_id = 260 AND h.created_at=(
SELECT MAX(`created_at`)
FROM histories h2
WHERE h2.application_id=h.application_id
)
使用相關子查詢:
SELECT h.*
FROM histories h
WHERE h.checkpoint_id = 260 AND
h.created_at = (SELECT MAX(h.created_at)
FROM histories h2
WHERE h2.application_id = h2.application_id AND
h2.checkpoint_id = h.checkpoint_id
);
您的版本只是將每個created_at
與created_at
進行比較,后者是任何應用程序/檢查點組合的最大值。 您需要一個專門用於您的組合的產品。
我的方法:
SELECT *
FROM histories h
WHERE h.checkpoint_id = 260
order by h.created_at desc
LIMIT 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.