[英]sql get row with max date and relative id record
我嘗試做一個簡單的查詢,花了幾個小時的時間,什么都沒得到....
我只需要獲得MAX日期,所有都是相應的字段。
我解釋說:我有一個包含這些字段的表: BasketID
, OrderStatusTypeID
, StatusDate
。
我嘗試只獲得一個包含OrderStatusTypeID
值的記錄和最后一個StatusDate
。
這是數據
BasketID OrderStatusTypeID date
1111 13 2013-04-01 11:38:31
1111 26 2013-04-04 17:44:17
1111 39 2013-04-02 12:35:07
1111 40 2013-04-08 12:52:55
這是我的查詢:
SELECT BasketID, OrderStatusTypeID, max(StatusDate) date
FROM st
where BasketID=1111
group by BasketID
這是我需要的結果
BasketID OrderStatusTypeID date
63558 40 2013-04-08 12:52:55
出於某種原因,我只獲得OrderStatusTypeID = 13
而不是40
! (StatusDate的最大值,而不是OrderStatusTypeID的最大值)。
為什么???
BasketID OrderStatusTypeID date
63558 13 2013-04-08 12:52:55
感謝您的快速反應!
我假設您使用的是MySQL
因為即使您沒有在GROUP BY
子句中指定所有非聚合列,也可以運行查詢。
有很多方法可以解決這個問題,但我習慣這樣做。 該查詢使用子查詢,該子查詢分別獲取每個BasketID
的最新date
。 由於子查詢只返回兩列,因此需要將其連接回表本身以獲得其他列,只要它在兩列上匹配: BasketID
, Date
。
SELECT a.*
FROM st a
INNER JOIN
(
SELECT BasketID, MAX(Date) max_date
FROM st
GROUP BY BasketID
) b ON a.BasketID = b.BasketID AND
a.Date = b.max_date
即使存在未在GROUP BY
子句中指定的非聚合列,您的查詢也已成功執行而不會拋出異常,因為它在MySQL中是允許的。 請參閱GROUP BY的MySQL擴展 。
我知道這是一個舊線程,但為什么在這種情況下不可能使用ORDER BY和LIMIT? 像這樣的查詢:
SELECT * FROM st WHERE BasketID = 1111 ORDER BY Date DESC LIMIT 1
它非常容易使用TOP命令,如:
SELECT TOP 1 * FROM st
WHERE BasketID = 1111
ORDER BY date DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.