我从表中提取两列,以便返回具有当前日期日期的特定行,但仅返回当前日期。例如,Pencils的日期为2014年1月22日和2014年2月22日。我不希望它显示,因为它有两行具有唯一的日期。但是,在使用count(*)> 1来获取这些唯一行之后,我无法计算唯一行的数量。我尝试计算项目并检查项目(如果它只有一行,它会显示),“工作”,但然后检查其他值不起作用。
use db
select todate, item
from table
group by todate, item
having count(*)>1
and cast(todate as date) = '2015-1-17'
and count(item)=1
order by item
据我所知,这应该有用,不应该吗?我的猜测是问题在于count(item)和'计算所有非唯一行而不仅仅是唯一行,但我不知道如何解决这个问题。反正只计算唯一的行吗?
鉴于此表,
todate item
2015-01-17 pencil
2015-01-17 pencil
2014-02-22 pencil
2015-01-17 pen
2015-01-17 pen
2015-01-17 eraser
然后它应该返回
todate item
2015-01-17 pen
2015-01-17 eraser
因为那些只有一个唯一的日期。它不会返回铅笔,因为它有多个唯一的日期。
答案 0 :(得分:0)
这两个查询中的任何一个都应该有效。您可以看到哪一个更适合您。
注意:如果todate
列已经是日期数据类型,或者是时间总是午夜的日期时间,那么不要将其作为日期进行转换,它会表现得更好,因为它不必转换数据类型
select item, min(cast(todate as date)) as todate
from table
group by item
having min(cast(todate as date)) = '2015-1-17' --if you are wanting to filter for one date only
and min(cast(todate as date)) = max(cast(todate as date)) --all records have the same date
order by item
;
select item, min(cast(todate as date)) as todate
from table
group by item
having min(cast(todate as date)) = '2015-1-17' --if you are wanting to filter for one date only
and count(distinct cast(todate as date)) = 1 --this item has only one distinct date
order by item
;