我想從數據庫中分組並顯示每週註冊用戶的數量。SQL:選擇不同年份之間的星期數
我的代碼幾乎是完美的,但它並沒有對2016年的工作是正確的,這裏是數據庫:
(1, '2013-10-14 16:22:10'),
(2, '2013-12-28 16:22:10'),
(3, '2014-01-03 16:22:10'),
(4, '2014-01-08 16:22:10'),
(5, '2014-06-22 16:22:10'),
(6, '2014-12-19 16:22:10'),
(7, '2014-12-27 16:22:10'),
(8, '2015-01-01 16:22:10'),
(9, '2015-01-07 16:22:10'),
(10, '2015-12-12 16:22:10'),
(11, '2015-12-28 16:22:10'),
(12, '2015-12-29 16:22:10'),
(13, '2016-01-05 16:22:10'),
(14, '2016-01-10 16:22:10'),
(15, '2016-01-15 16:22:10');
這是查詢:
select
str_to_date(concat(yearweek(reg_data), ' monday'), '%X%V %W') as startingweek,
YEAR(reg_data)*52+WEEK(reg_data, 1) - YEAR('2013-10-14')*52 - WEEK('2013-10-14', 1) + 1 as week_number,
count(a.reg_data) as nr
from users as a
group by yearweek(reg_data, 1)
order by yearweek(reg_data, 1);
這是結果,2016年的最後2排不正確,我在括號中輸入了我期待的正確值:
startingweek week_number nr
October, 14 2013 00:00:00 1 1
December, 23 2013 00:00:00 11 1
December, 30 2013 00:00:00 12 1
January, 06 2014 00:00:00 13 1
June, 23 2014 00:00:00 36 1
December, 15 2014 00:00:00 62 1
December, 22 2014 00:00:00 63 1
December, 29 2014 00:00:00 64 1
January, 05 2015 00:00:00 65 1
December, 07 2015 00:00:00 113 1
December, 28 2015 00:00:00 116 2
January, 04 2016 00:00:00 116 (117) 2
January, 11 2016 00:00:00 117 (118) 1
我知道問題是關於我在查詢中使用的週數 - > 52,因爲有些年份有53周,但我不知道如何根據年份動態改變。
而且我做了這裏sqlfiddle:http://sqlfiddle.com/#!9/1e5df5/2
我試過你的查詢,你能告訴我它爲什麼顯示第2周,2次嗎? http://sqlfiddle.com/#!9/4c046/1 – Speedwheelftw
@Lachesis:我沒有檢查所有可能的細節,但是使用了兩個不同的'yearweek'計算,應該是相同的。當您更改爲MAX(regdata)而不是MIN時,它似乎工作。否則,將開始日更改爲知道星期一,例如, '2013-10-07' – dnoeth
謝謝,它的作品! – Speedwheelftw