簡體   English   中英

SQL-如何根據最大日期和GROUP BY獲得結果

[英]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_atcreated_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM