SQL Server テーブルに次のレコードがあるとします。
Date
19/5/2009 12:00:00 pm
19/5/2009 12:15:22 pm
20/5/2009 11:38:00 am
このようなものを取得するための SQL 構文は何ですか?
日付 カウント
2009年 5 月 19 日 2
2009年 5 月 20 日 1
SQL Server テーブルに次のレコードがあるとします。
Date
19/5/2009 12:00:00 pm
19/5/2009 12:15:22 pm
20/5/2009 11:38:00 am
このようなものを取得するための SQL 構文は何ですか?
日付 カウント
2009年 5 月 19 日 2
2009年 5 月 20 日 1
このように、日付フィールドの日付のみのバージョンでグループ化を行う必要があります。
SELECT
CONVERT(VARCHAR(10), YourDateColumn, 101),
COUNT(*)
FROM
YourTable
GROUP BY
CONVERT(VARCHAR(10), YourDateColumn, 101)
ただし、varcharへの変換を回避するため、通常はこれを行います。
SELECT
DATEPART(yy, YourDateColumn),
DATEPART(mm, YourDateColumn),
DATEPART(dd, YourDateColumn),
COUNT(*)
FROM
YourTable
GROUP BY
DATEPART(yy, YourDateColumn),
DATEPART(mm, YourDateColumn),
DATEPART(dd, YourDateColumn)
編集:日時の日付部分だけを取得する別の方法
DATEADD(d, 0, DATEDIFF(d, 0, YourDateColumn))
それはあなたのデータベースエンジンに依存するでしょう。SQL Server 2008(および将来のバージョン)では、date
型を使用してこれを行うことができます。
select
convert(date, date_column_name) as Date,
count(1) as Count
from table_name
group by convert(date, date_column_name)
ご使用のDBMSによって異なります。Mysqlの例:
SELECT DATE_FORMAT(dateColumn, '%e/%c/%Y') as `date`, COUNT(*)
FROM YourTable
GROUP BY `date`
どの RDBMS を使用していますか? Sybase を使用すると、クエリは次のようになります。
select date(datetimeColumn) as myDate, count(*) as myTotal
from thisTable
Group by myDate
Order by myTotal, myDate
グーグルがこれも見つけた後...
SELECT CAST(FLOOR(CAST(Expr1 AS FLOAT)) AS DATEtime) AS Expr1,
COUNT(*) AS Expr2
FROM MY_TABLE
グループ化
CAST(FLOOR(CAST(Expr1 AS FLOAT)) AS DATEtime)
短所は?
皆さん、ありがとうございました