第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

檢索每個(gè)組中的最后一條記錄未獲得預(yù)期結(jié)果 - MySQL

檢索每個(gè)組中的最后一條記錄未獲得預(yù)期結(jié)果 - MySQL

PHP
鴻蒙傳說 2023-05-26 14:18:58
我想從表中獲取每個(gè)類別的最后兩個(gè)月的數(shù)據(jù)。表看起來像:Id 年月類別值1 2019 1 TEST1 102 2018 12 TEST1 10 3 201810 TEST1 104 2018 1 TEST2 105 2018 12 TEST2 106 2018 1 TEST3 10預(yù)期輸出:Id 年月類別值1 2019 1 TEST1 102 2018 12 TEST1 105 2018 12 TEST2 104 2018 1 TEST2 106 2018 1 TEST3 10我嘗試使用:SELECT a.year,a.month,a.value, a.categoryFROM test_data AS aWHERE (SELECT COUNT(*)FROM test_data AS bWHERE b.category = a.category AND (b.year >= a.year AND b.month >= a.month)) <= 2ORDER BY a.year DESC, a.month DESC但它給出了 TEST1 類別的額外記錄。我猜是因?yàn)樗谀甓葪l件下沒有按預(yù)期工作。請(qǐng)為此提供解決方案
查看完整描述

1 回答

?
侃侃無極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

您的首要工作應(yīng)該是修復(fù)您的數(shù)據(jù)模型并使用date類似 - 的數(shù)據(jù)類型來存儲(chǔ)日期信息,而不是將其分散在不同的列中。這應(yīng)該像向表中添加新列并從現(xiàn)有列更新它一樣簡單:


alter table test_data add mydate date;

update test_data set mydate = concat(year, '-', month, '-01');

也就是說,要使您當(dāng)前的查詢正常工作,您需要按如下方式微調(diào)日期條件。一種選擇使用算術(shù):


SELECT a.year, a.month, a.value, a.category

FROM test_data AS a

WHERE (

    SELECT COUNT(*)

    FROM test_data AS b

    WHERE 

        b.category = a.category 

        AND 100 * b.year + b.month >= 100 * a.year + a.month

) <= 2

ORDER BY a.year DESC, a.month DESC

或者,如果您運(yùn)行的是 MySQL 8.0,則可以使用row_number():


SELECT  a.year, a.month, a.value, a.category

FROM (

    SELECT 

        a.*,

        ROW_NUMBER() OVER(PARTITION BY a.category ORDER BY a.year DESC, a.month DESC)

    FROM test_data AS a 

) a

WHERE rn <= 2


查看完整回答
反對(duì) 回復(fù) 2023-05-26
  • 1 回答
  • 0 關(guān)注
  • 118 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)