亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

選擇3條最新記錄,其中一列的值是不同的

選擇3條最新記錄,其中一列的值是不同的

哆啦的時光機 2019-11-30 10:37:47
我有下表:    id       time      text      otheridentifier    -------------------------------------------    1        6         apple     4    2        7         orange    4    3        8         banana    3    4        9         pear      3    5        10        grape     2我想做的是選擇3條最近的記錄(按時間desc),它們的otheridentifiers是不同的。因此,在這種情況下,結果將是id:5、4和2。id= 3將被跳過,因為有相同otheridentifier字段的最近記錄。這是我嘗試做的事情:SELECT * FROM `table` GROUP BY (`otheridentifier`) ORDER BY `time` DESC LIMIT 3然而,我最終得到的行id= 5,3,和1而不是5,4,2按預期方式。有人可以告訴我為什么這個查詢不會返回我期望的結果嗎?我嘗試將ORDER BY更改為ASC,但這只是將返回的行重新排列為1、3、5。
查看完整描述

3 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

它不會返回您期望的結果,因為分組是在排序之前發生的,這從子句在SQL語句中的位置反映出來。不幸的是,您將不得不變得更加幻想才能獲得想要的行。嘗試這個:


SELECT *

FROM `table`

WHERE `id` = (

    SELECT `id`

    FROM `table` as `alt`

    WHERE `alt`.`otheridentifier` = `table`.`otheridentifier`

    ORDER BY `time` DESC

    LIMIT 1

)

ORDER BY `time` DESC

LIMIT 3


查看完整回答
反對 回復 2019-11-30
?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

您可以將表本身聯接起來以過濾per的最后一個條目otheridentifier,然后采用該表的前3行:


SELECT last.*

FROM `table` last

LEFT JOIN `table` prev 

    ON prev.`otheridentifier` = last.`otheridentifier`

    AND prev.`time` < last.`time`

WHERE prev.`id` is null

ORDER BY last.`time` DESC 

LIMIT 3


查看完整回答
反對 回復 2019-11-30
?
慕絲7291255

TA貢獻1859條經驗 獲得超6個贊

我有類似的要求,但選擇標準更高。使用其他一些答案,我無法確切獲得所需的信息,但是我發現您仍然可以像下面這樣執行GROUP BY和ORDER BY:


SELECT t.* FROM (SELECT * FROM table ORDER BY time DESC) t 

GROUP BY t.otheridentifier


查看完整回答
反對 回復 2019-11-30
  • 3 回答
  • 0 關注
  • 554 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號