Sql server 日期类型为的sql条件聚合函数
我的桌子像:Sql server 日期类型为的sql条件聚合函数,sql-server,aggregate-functions,Sql Server,Aggregate Functions,我的桌子像: CREATE TABLE myissues ( id int IDENTITY(1,1) primary key, title varchar(20), status varchar(30), submitdate datetime, updatedate datetime ); INSERT INTO myissues (tit
CREATE TABLE myissues
(
id int IDENTITY(1,1) primary key,
title varchar(20),
status varchar(30),
submitdate datetime,
updatedate datetime
);
INSERT INTO myissues
(title, status,submitdate,updatedate)
VALUES
('issue1', 'closed','2014-01-01 07:59:59.000','2014-01-02 10:59:59.000'),
('issue2', 'closed','2014-01-01 08:59:59.000','2014-01-02 12:59:59.000'),
('issue3', 'closed','2014-01-01 09:59:59.000','2014-01-02 10:59:59.000'),
('issue4', 'closed','2014-01-02 07:59:59.000','2014-01-03 10:59:59.000'),
('issue5', 'closed','2014-01-02 08:59:59.000','2014-01-03 11:59:59.000'),
('issue6', 'closed','2014-01-03 08:59:59.000','2014-01-03 12:59:59.000');
我想得到每天发行的数量,数量应该分为两个不同的类别:提交的开放发行和关闭的开放发行,状态为“关闭”和更新日期。
以下是我的sql脚本:
SELECT
convert(nvarchar(10),submitdate,112) as Dates,
COUNTS_OPEN = SUM(case when (submitdate > CONVERT(datetime, '2014-01-01 00:00:00.000') and submitdate < CONVERT(datetime, '2014-01-05 00:00:00.000') ) then 1 else 0 end),
COUNTS_CLOSED = SUM(case when (status='closed' and (updatedate > CONVERT(datetime, '2014-01-01 00:00:00.000') and updatedate < CONVERT(datetime, '2014-01-05 00:00:00.000')) ) then 1 else 0 end)
FROM myissues
GROUP BY convert(nvarchar(10),submitdate,112)
order by convert(nvarchar(10),submitdate,112)
如您所见,计数u CLOSED的结果是错误的。以上所列日期的正确结果应为0,3,3。
我想我没有把它正确地分组。有人能帮忙吗
谢谢 您需要将结束计数与主查询分开。试试这个
SELECT convert(nvarchar(10),submitdate,112) as Dates,
COUNTS_OPEN = COUNT(1),
COUNTS_CLOSED = (SELECT COUNT(1) FROM myissues f WHERE f.status = 'closed' AND convert(nvarchar(10),updatedate,112) = convert(nvarchar(10), m.submitdate,112))
FROM myissues m
GROUP BY convert(nvarchar(10),submitdate,112)
order by convert(nvarchar(10),submitdate,112)
请注意,如果问题在没有提交问题的日期关闭,则此查询将不起作用。要做到这一点,你需要得到一份详尽的日期清单
试试这样的
SELECT m.Dates,
COUNTS_OPEN = (SELECT COUNT(1) FROM myissues f WHERE convert(nvarchar(10),submitdate,112) = m.Dates),
COUNTS_CLOSED = (SELECT COUNT(1) FROM myissues f WHERE f.status = 'closed' AND convert(nvarchar(10),updatedate,112) = m.Dates)
FROM (
SELECT convert(nvarchar(10),submitdate,112) as Dates
FROM myissues
UNION
SELECT convert(nvarchar(10),updatedate,112)
FROM myissues
) m
order by m.Dates
您正在按
submitdate
进行分组。我不明白当只有一个条目的提交日期为20140103时,你怎么会期望计数大于1。谢谢你的回复,这也是我的猜测。应该有另一种方法将其分组。
SELECT m.Dates,
COUNTS_OPEN = (SELECT COUNT(1) FROM myissues f WHERE convert(nvarchar(10),submitdate,112) = m.Dates),
COUNTS_CLOSED = (SELECT COUNT(1) FROM myissues f WHERE f.status = 'closed' AND convert(nvarchar(10),updatedate,112) = m.Dates)
FROM (
SELECT convert(nvarchar(10),submitdate,112) as Dates
FROM myissues
UNION
SELECT convert(nvarchar(10),updatedate,112)
FROM myissues
) m
order by m.Dates