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

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

MySQL如何在范圍內(nèi)填寫缺失日期?

MySQL如何在范圍內(nèi)填寫缺失日期?

波斯汪 2019-06-03 16:12:10
MySQL如何在范圍內(nèi)填寫缺失日期?我有一張有兩列,日期和分?jǐn)?shù)的桌子。在過去的30天中,它最多有30條目。date      score-----------------1.8.2010  192.8.2010  214.8.2010  147.8.2010  1010.8.2010 14我的問題是有些日期不見了-我想看看:date      score-----------------1.8.2010  192.8.2010  213.8.2010  04.8.2010  145.8.2010  06.8.2010  07.8.2010  10...我需要從單個(gè)查詢中得到:19,21,9,14,0,0,10,0,0,14.這意味著缺少的日期被0填充。我知道如何獲得所有的值,并在服務(wù)器端語言中迭代日期和遺漏空白。但是在MySQL中是否可以這樣做,這樣我就可以按日期對結(jié)果進(jìn)行排序,并得到丟失的部分。編輯:在這個(gè)表中有一個(gè)名為userid的列,所以我有30.000個(gè)用戶,其中一些用戶在這個(gè)表中得分。我刪除每天的日期,如果日期<30天前,因?yàn)槲倚枰詈?0天的得分為每個(gè)用戶。原因是我正在繪制一個(gè)用戶在過去30天的活動(dòng)的圖表,并繪制一個(gè)圖表,我需要用逗號分隔的30個(gè)值。所以我可以在查詢中告訴我userid=10203活動(dòng),這個(gè)查詢會(huì)給我30分,在過去的30天中每個(gè)都有一個(gè)。我希望我現(xiàn)在說的更清楚了。
查看完整描述

3 回答

?
慕慕森

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

您可以通過使用日歷表..這是一個(gè)表,您只創(chuàng)建一次并填充一個(gè)日期范圍(例如,2000-2050年期間每天有一個(gè)數(shù)據(jù)集;這取決于您的數(shù)據(jù))。然后,您可以根據(jù)日歷表對表進(jìn)行外部連接。如果表中缺少日期,則返回0作為得分。


查看完整回答
反對 回復(fù) 2019-06-03
?
白板的微信

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


我不喜歡其他答案,要求創(chuàng)建表格等等。這個(gè)查詢在沒有助手表的情況下有效地完成了它。


SELECT 

    IF(score IS NULL, 0, score) AS score,

    b.Days AS date

FROM 

    (SELECT a.Days 

    FROM (

        SELECT curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Days

        FROM       (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a

        CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b

        CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c

    ) a

    WHERE a.Days >= curdate() - INTERVAL 30 DAY) b

LEFT JOIN your_table

    ON date = b.Days

ORDER BY b.Days;

所以讓我們解剖一下這個(gè)。


SELECT 

    IF(score IS NULL, 0, score) AS score,

    b.Days AS date

if將檢測沒有得分的天數(shù),并將其設(shè)置為0。日期是您從當(dāng)前日期(最多1000天)選擇的所配置的天數(shù)。


    (SELECT a.Days 

    FROM (

        SELECT curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Days

        FROM       (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a

        CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b

        CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c

    ) a

    WHERE a.Days >= curdate() - INTERVAL 30 DAY) b

這個(gè)子查詢是我在堆棧溢出上看到的。它有效地從當(dāng)前日期生成過去1000天的列表。末尾WHERE子句中的間隔(當(dāng)前為30)確定返回的日期;最大值為1000。此查詢可以很容易地修改為返回值為1000年的日期,但對于大多數(shù)情況來說,1000應(yīng)該是好的。


LEFT JOIN your_table

    ON date = b.Days

ORDER BY b.Days;

這是把你的表中包含分?jǐn)?shù)的部分。將所選日期范圍與從日期生成器查詢到的選定日期范圍進(jìn)行比較,以便能夠在需要時(shí)填寫0(得分將設(shè)置為NULL最初,因?yàn)樗荓EFT JOIN這在SELECT語句中是固定的)。我也是按日期點(diǎn)的,只是因?yàn)?。這是偏好,你也可以按分?jǐn)?shù)訂購。


在ORDER BY您可以很容易地加入您的表格,有關(guān)您提到的用戶信息與您的編輯,以添加最后的要求。


我希望這個(gè)版本的查詢能幫助到一些人。謝謝你的閱讀。


查看完整回答
反對 回復(fù) 2019-06-03
  • 3 回答
  • 0 關(guān)注
  • 1176 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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