2017-05-16 15 views
0

私はSQL Serverの世界で初めてです。私は以下のような表を持っています:1日に基づいてカウントを予測する方法は?

alert_id | create_date | Status 
---------+-------------+--------- 
1231  | 4/15/2017 | Open 
1232  | 4/15/2017 | Open 
1234  | 4/15/2017 | Closed 
1235  | 4/16/2017 | Open 

これらの警告はすべて30日後に終了します。過去30日間に何回アラートが何回表示されているかを示す予測レポートを取得する必要があります。

出力が2列である選択クエリを書きたいと思います。最初は日付、2番目はカウントです。日付列には次の30日間のすべての日付が表示され、[カウント]列にはその日に期限切れとなるレコードの数が表示されます。以下のようなものが動作します。手伝ってください。

date  | Count 
----------+--------- 
5/15/2017 | 2 
5/16/2017 | 3 
5/17/2017 | 0 
5/18/2017 | 0 
. 
. 
. 
6/14/2017 | 0 
+2

あなたはsql-serverまたはmysqlを使用していますか...間違ったタグと正しいものを削除します – scaisEdge

答えて

0

これはGROUP BYと日付演算の仕事です。 MySQLの場合:

SELECT DATE(create_date) + INTERVAL 30 DAY expire_date, COUNT(*) num 
    FROM tbl 
WHERE status = 'Open' 
GROUP BY DATE(create_date) 

DATE(create_date) + INTERVAL 30 DAYは、作成日の値に30日を追加します。

GROUP BY(create_date)は、作成日の値でデータをグループ化し、深夜に切り捨てます。

さらに、COUNT(*)GROUP BYとなり、各グループのレコード数がわかります。

SQL Serverの最近のバージョンでは編集(MS)

SELECT DATEADD(day, 30, CAST(create_date AS DATE)) expire_date, COUNT(*) num 
    FROM tbl 
WHERE status = 'Open' 
GROUP BY CAST(create_date AS DATE) 

通知は、その日付の計算は、SQLサーバソフトウェアの製造元とモデルの間で変化して下さい。そのため、あなたの質問に[oracle] [mysql] [sql-server]のような複数のタグを使用すると、Stack Overflowユーザーがコメントに困惑します。

クール、ハァッですか?集計クエリ(要約クエリとも呼ばれることもあります)を読み上げる必要があります。

あなたはそれらによってゼロで失われた日付を取得するつもりはありません。これは、SQLではかなり難しいことです。

+0

私はsql-serverを使用しています。上記の方法で試してみると、 "'DATE'は認識された組み込み関数名ではありません。" – Monty

+0

以下のようなクエリは、 "date"カラムの出力を希望しますが、create_dateを使って2番目のカラムに必要なデータを取得する方法がわかりません。
master..spt_valuesからdateand(d、number、getdate() - 1)を選択します。ここで、type = 'p'および1〜30の数字です。 – Monty

+0

助けていただければ幸いです。 – Monty