Sql 选择具有某些值但同时没有其他值的记录
在开始之前,感谢您的帮助 我的问题是:我有一个表,例如activity_records,它有一个日期列和一个activity_id列 我只想选择那些日期,例如,在具有相同日期的任何其他记录中,activity_id值为1但不具有2的日期 我尝试过多选查询和所有这些Sql 选择具有某些值但同时没有其他值的记录,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,在开始之前,感谢您的帮助 我的问题是:我有一个表,例如activity_records,它有一个日期列和一个activity_id列 我只想选择那些日期,例如,在具有相同日期的任何其他记录中,activity_id值为1但不具有2的日期 我尝试过多选查询和所有这些 SELECT [date] FROM [activity_records] WHERE [activity_id] = 1 EXCEPT SELECT [date] FROM [activity_records] WHERE [act
SELECT [date] FROM [activity_records] WHERE [activity_id] = 1
EXCEPT
SELECT [date] FROM [activity_records] WHERE [activity_id] = 2
另请参见不存在的地方,并应用于更复杂的场景。一种方法使用不存在:
因为您只需要日期,所以另一种选择是分组方式:
或者,最简单的是针对这种特殊情况:
select ar.date
from activity_records ar
where ar.activity_id in (1, 2)
group by ar.date
having max(ar.activity_id) = 1 ;
另一种方法是只对具有一个不同activity_id的日期进行筛选,然后通过自联接过滤那些activity_id=1的日期
SELECT DISTINCT B.DATE
FROM
(SELECT DATE, COUNT(DISTINCT ACTIVITY) AS COUNT_ACTIVITIES
FROM YOUR_TABLE
GROUP BY DATE
HAVING COUNT(DISTINCT ACTIVITY) = 1) A
INNER JOIN
YOUR_TABLE B
ON A.DATE = B.DATE
AND B.ACTIVITY_ID = 1;
一种方法不适用于:
从活动\记录中选择ar.*,其中ar.activity\ id=1,ar.date不在活动\记录中选择ar2.date,其中ar2.activity\ id=2 谢谢!这些解决方案太棒了,我要全部尝试!
select ar.date
from activity_records ar
where ar.activity_id in (1, 2)
group by ar.date
having max(ar.activity_id) = 1 ;
SELECT DISTINCT B.DATE
FROM
(SELECT DATE, COUNT(DISTINCT ACTIVITY) AS COUNT_ACTIVITIES
FROM YOUR_TABLE
GROUP BY DATE
HAVING COUNT(DISTINCT ACTIVITY) = 1) A
INNER JOIN
YOUR_TABLE B
ON A.DATE = B.DATE
AND B.ACTIVITY_ID = 1;