SQL Server(2012)を使用しており、以下の2つの(簡略化された)テーブルを使用して、3つの個別のレポート(日次、週次、月次)を作成し、次の計算フィールドを含めるにはどうすればよいですか。
1. new users created in this period
2. total number of users at this time
**Users**
userID int
name varchar(80)
userCreated datetime
**Orders**
orderID int
userID int
orderCreated datetime
私はこのコードをいじっています:
SELECT CAST(DATEPART(dd,userCreated) as VARCHAR(2)) + '/' + CAST(DATEPART(mm,userCreated) AS VARCHAR(2)) + '/' + CAST(DATEPART(yyyy,userCreated) AS VARCHAR(4)) [Date],
count(*) newSignUps,
(select count(*) from users u2 WHERE u2.userCreated < u1.userCreated)
FROM users u1
WHERE userCreated BETWEEN '05/01/2014 00:00:00.000' and '05/31/2014 23:59:59.000'
GROUP BY DATEPART(dd,userCreated), DATEPART(mm,userCreated), DATEPART(yyyy,userCreated),userCreated
ただし、何かを表示するには、グループ化に「userCreated」フィールドを追加する必要があります...
私が示す必要のあるレポートの場合:
毎日:
date new sign ups users in system
17/03/2013 10 100
18/03/2013 4 104
19/03/2013 8 112
毎週:
week
13 8 40
14 2 42
15 5 47
毎月:
Jan 3 54
Feb 9 63
Mar 2 65
これが理にかなっているといいのですが?ありがとうございました...
あなたの質問を正しく理解したかどうかはわかりませんが、これにより、1日に作成されたすべてのユーザーがわかります。
SELECT year(userCreated), month(userCreated), day(userCreated), count(*)
FROM Users
GROUP BY year(userCreated), month(userCreated), day(userCreated)
これは月ごとに:
SELECT year(userCreated), month(userCreated), count(*)
FROM Users
GROUP BY year(userCreated), month(userCreated)
そしてこれは週ごとに:
SELECT year(userCreated), datepart(week, userCreated), count(*)
FROM Users
GROUP BY year(userCreated), datepart(week, userCreated)
不足している合計フィールドに応じて編集します。ここでは、月のクエリの例を示します。
SELECT year(userCreated), month(userCreated), count(*) AS NewCount,
(SELECT COUNT(*) FROM Users u2 WHERE
CAST(CAST(year(u1.userCreated) AS VARCHAR(4)) + RIGHT('0' + CAST(month(u1.userCreated) AS VARCHAR(2)), 2) + '01' AS DATETIME) > u2.userCreated) AS TotalCount
FROM Users u1
GROUP BY year(userCreated), month(userCreated)
これが他の2つのクエリに役立つことを願っています。
[〜#〜]毎日[〜#〜]
select count(UserId),userCreated
from User WHERE CONDITION group by CreatedOn
[〜#〜]毎月[〜#〜]
select count(UserId),
LEFT(CONVERT(varchar, userCreated ,112),6) from User
WHERE CONDITION group by LEFT(CONVERT(varchar, userCreated ,112),6)
OR
select count(UserId),
month(userCreated )
from User group by month(userCreated )
[〜#〜]毎週[〜#〜]
select count(UserId),
DATEPART( wk, userCreated)
from User WHERE CONDITION group by DATEPART( wk, userCreated )
新規ユーザー数と既存ユーザー数の両方(毎月行った)
select new,
(select count(UserId) from User where month(userCreated)<=monthwise) as total,
monthwise
FROM (
select count(UserId) as new,
month(userCreated)as monthwise from User group by month(userCreated)
)tmp