私はこれに答えてもらえればいいと思っていますが、それにもかかわらず、土曜日に週が始まる週別に日付フィールドをグループ化するにはどうすればよいですか?
週を土曜日にグループ化するにはどうすればよいですか?私は、SQL Serverが手元にないので未検証
私はこれに答えてもらえればいいと思っていますが、それにもかかわらず、土曜日に週が始まる週別に日付フィールドをグループ化するにはどうすればよいですか?
週を土曜日にグループ化するにはどうすればよいですか?私は、SQL Serverが手元にないので未検証
あなたが最初の最初の日としてSaturday
を設定するためにDATEFIRSTを使用する必要がありますあなたの週。値は月曜日を示し、値はは土曜日を示します。次にDATEPARTとweek
またはwk
またはww
を使用して、日付列の値をグループ化することができます。 2012-01-07ので、あなたは、日付2012-01-07
と2012-01-08
のために値以下のサンプルデータで見ることができる
はweekno の下にグループ化され土曜日です。 1月1日は、常に1年の第1週です。
Click here to view the output in SQL Fiddle.
スクリプト:
CREATE TABLE weekdays
(
datevalue datetime NOT NULL
, numericvalue INT NOT NULL
);
INSERT INTO weekdays (datevalue, numericvalue) VALUES
('2012-01-01', 4),
('2012-01-02', 1),
('2012-01-07', 2),
('2012-01-08', 8),
('2012-01-14', 3),
('2012-01-15', 2),
('2012-01-19', 6);
SET DATEFIRST 6;
SELECT DATEPART(wk, datevalue) weekno
, SUM(numericvalue) totalvalue
FROM weekdays
GROUP BY DATEPART(wk, datevalue)
出力:
weekno totalvalue
------ ----------
1 5
2 10
3 11
OK、MySQLのにまっすぐ翻訳が期待どおりに動作するように見えたものの:
SELECT *
FROM (SELECT your_date_field,
DATEADD(D,
-(DATEPART(DW,your_date_field) MOD 7), your_date_field) AS saturday
FROM your_table)
GROUP BY saturday
ORDER BY your_date_field
はこれで本当の問題を抱えていたが、これは設定されて防止することができる余分なテーブルやDATEFIRSTを防ぎます。ここで私の答えは、既知の日付メソッドと呼び出しレコードを取得して検索されます。
19000101 =月曜日 - したがって、あなたのようにDATEPART
機能を使用する必要があります19000106
SELECT MIN(dateadd(day, datediff(
day,'19000106', CallRecords.CallStartTime)/7*7, '19000106'))
AS CallStartTime
FROM CallRecords
GROUP BY DATEDIFF(day,'19000106', CallRecords.CallStartTime)/7
SQL ServerとSQL Server Compactの上でテスト済み
4.0
として土曜日に設定覚えることは必ずしも容易で:
SELECT DATEPART(wk, Date), SUM(Value)
FROM Table
GROUP BY DATEPART(wk, Date)
希望すると、これが役立ちます。
+1努力のため。シヴァの答えがそれほど素晴らしいわけではないので、それがうまくいくかどうかは分からない。 –
これは本当に私が本当に他のdbmsから羨望の唯一のものです...クエリの他の部分で選択句からエイリアスを使用する能力。 –