簡體   English   中英

sql獲取具有最大日期和相對id記錄的行

[英]sql get row with max date and relative id record

我嘗試做一個簡單的查詢,花了幾個小時的時間,什么都沒得到....
我只需要獲得MAX日期,所有都是相應的字段。

我解釋說:我有一個包含這些字段的表: BasketIDOrderStatusTypeIDStatusDate
我嘗試只獲得一個包含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 由於子查詢只返回兩列,因此需要將其連接回表本身以獲得其他列,只要它在兩列上匹配: BasketIDDate

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.

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