Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如果另一列按日期列包含2个值,请选择ID列_Sql Server - Fatal编程技术网

Sql server 如果另一列按日期列包含2个值,请选择ID列

Sql server 如果另一列按日期列包含2个值,请选择ID列,sql-server,Sql Server,我有一张表,其结构如下: 我只想选择包含以下2个描述(已报告、已解决)的ID,但是,报告的ID必须在“已解决日期”之前 因此,在上表示例中,当我运行查询时,我应该获得ID1,您可以执行聚合: select id from table t group by id where Descriptions in ('Reported', 'Resolved') having count(*) = 2 and max(case when Descriptions = 'Reported'

我有一张表,其结构如下:

我只想选择包含以下2个描述(已报告、已解决)的ID,但是,报告的ID必须在“已解决日期”之前


因此,在上表示例中,当我运行查询时,我应该获得ID1,您可以执行聚合:

select id
from table t
group by id
where Descriptions in ('Reported', 'Resolved') 
having count(*) = 2 and
       max(case when Descriptions = 'Reported' then date end) < 
       max(case when Descriptions = 'Resolved' then date end);
选择id
来自表t
按id分组
其中的描述('已报告','已解决')
计数(*)等于2且
最大值(描述=‘已报告’然后是日期结束时的情况)<
最大值(描述为“已解决”然后为日期结束时的情况);

您可以执行以下操作:

select id
from table t
group by id
where Descriptions in ('Reported', 'Resolved') 
having count(*) = 2 and
       max(case when Descriptions = 'Reported' then date end) < 
       max(case when Descriptions = 'Resolved' then date end);
选择id
来自表t
按id分组
其中的描述('已报告','已解决')
计数(*)等于2且
最大值(描述=‘已报告’然后是日期结束时的情况)<
最大值(描述为“已解决”然后为日期结束时的情况);

使用条件聚合:

select id
from tablename
group by id
having max(case when description ='Reported' then date end) < max(case when description = 'Resolved' then date end)
选择id
从表名
按id分组
最大值(描述为“已报告”时的情况,然后是日期结束)<最大值(描述为“已解决”时的情况,然后是日期结束)
只有当同一id的两个描述都存在且满足不等式时,
HAVING
子句才会返回
TRUE


如果其中任何一个缺失,结果将为
NULL
,并且
id
将被过滤掉

使用条件聚合:

select id
from tablename
group by id
having max(case when description ='Reported' then date end) < max(case when description = 'Resolved' then date end)
选择id
从表名
按id分组
最大值(描述为“已报告”时的情况,然后是日期结束)<最大值(描述为“已解决”时的情况,然后是日期结束)
只有当同一id的两个描述都存在且满足不等式时,
HAVING
子句才会返回
TRUE


如果其中任何一个缺失,结果将为
NULL
,并且
id
将被过滤掉

到目前为止你都尝试了什么,为什么不奏效?报告日期是否与解决日期相同?此外,这些日期似乎不完整,没有年份。你怎么知道2月5日不是2月6日之后?如果没有年份,如果您的日期是12月30日和1月02日,或者时间段超过一年,这将非常麻烦。@Larnu报告的日期和解决的日期可以在同一天,但是,日期列也包含时间,如下所示:2017-06-02 20:10:57.847到目前为止您尝试了什么,为什么不起作用?报告日期是否与解决日期相同?此外,这些日期似乎不完整,没有年份。你怎么知道2月5日不是2月6日之后?如果没有年份,如果您的日期是12月30日和1月02日,或者时间段超过一年,那么这将非常麻烦。@Larnu报告的日期和解决的日期可以在同一天,但是,日期列也包含时间,如下所示:2017-06-02 20:10:57.847谢谢您这一个也有效,count子句将其限制为仅存在2个条件实例的ID。不过,对于其他目的来说,这是一个很好的解决方案。谢谢。这个解决方案同样有效,count子句将其限制为仅存在2个条件实例的ID。然而,出于其他目的,这是一个很好的解决方案。