我希望將它的時間戳記字段上的記錄按兩週分組。我現在每週都這樣做,但我希望它也是兩週一次。我怎麼做 ?有沒有特定的方法來做到這一點,比如我們如何使用WEEK('timestamp','%d-%m-%Y')函數來分組?每兩週分組一次mysql記錄
在下面的圖片中,你可以看到日期21和14來兩週10.任何建議?
我希望將它的時間戳記字段上的記錄按兩週分組。我現在每週都這樣做,但我希望它也是兩週一次。我怎麼做 ?有沒有特定的方法來做到這一點,比如我們如何使用WEEK('timestamp','%d-%m-%Y')函數來分組?每兩週分組一次mysql記錄
在下面的圖片中,你可以看到日期21和14來兩週10.任何建議?
由2拍攝結果從week()
和除法,轉換爲整數(向上或向下)。由於今年的第一週爲1周(取決於模式week()
使用),你可能希望同時第1周和2周,成爲兩週1,使周0變爲兩週0,我們將使用ceil()
:
select sum(amount) as amountSum, ceil(week(myTimestamp)/2) as fortnight
from myTable
group by fortnight
order by fortnight;
編輯:在獲得兩週的最後一天...
沒有內置函數來得到一個週數的任何日期。多麼有趣。
由於您在兩週進行了聚合和分組(因此結果行可能會在幾十個),我通常首先考慮在客戶端代碼中計算這些填充值以消耗結果,但事實證明它實際上是由於訪問原始時間戳,在數據庫中更容易執行此操作,儘管這很難看。
您所要做的只是從原始時間戳中計算一週的結束時間,但如果是從第一週開始計算,則還必須再增加7天,以便從第二週的第二週每兩週。 (基於this article。)我還增加了一年,以防萬一。並且還假定星期日是一週中的第一天(但請仔細檢查您的MySQL實例的default_week_format
與week()
的表以進行仔細檢查)。
select sum(amount) as amountSum, year(myTimestamp) as yr, ceil(week(myTimestamp)/2) as fortnight,
date_add(myTimestamp, interval (7 - dayofweek(myTimestamp)) + ((week(mytimestamp) % 2) * 7) day) as endoffortnight
from myTable
group by yr, fortnight
order by yr, fortnight;
我希望那個作品或者距離不夠近。我沒有用很多數據對它進行測試。
從任意起始日期測量的天數,然後由14以下劃分爲紅移PSQL實現:
SELECT COUNT(1)
,DATEDIFF('day', '5-28-2012', hour)/14 as fortnight,
,DATEADD('day', 14 * (DATEDIFF('day', '5-28-2012', hour)/14), '5-28-2012') as start_of_fortnight
GROUP BY 1
ORDER BY 1
一週()函數可以得到相當複雜 - 我躲開它。
SELECT CEILING(DATEPART(wk,Timestamp)/2.0) AS 'Fortnight'
FROM mytable
GROUP BY CEILING(DATEPART(wk,Timestamp)/2.0)
ORDER BY CEILING(DATEPART(wk,DateKey)/2.0);
使用DATEPART
功能,wk
給出了一年的週數。當我們GROUP BY DATEPART(wk,Timestamp)/2
,我們正在每兩週一組。可以使用CEILING()
或ROUND()
。
FYI DATEPART(WK,時間戳)/ 2的範圍是從0到26因此
DATEPART(DATEPART(WK,時間戳)/ 2)的範圍是從0到26 但 CEILING(DATEPART(WK,時間戳)/2。0)的範圍是1到27
我給你的問題upvote,因爲添加關於想要兩個星期的最後日期的皺紋使它十倍更難,這很有趣。因爲你使用了「四周」這個詞。通常情況下,你會編輯你的問題,使得諸如此類的細節成爲問題的一部分,而不是在評論中提問並在問題中提出含糊不清的問題。 (截至修訂2,該問題的這一部分沒有清楚地傳達你想要的而不是你所得到的。) – 2011-05-29 06:47:26