计算唯一行后计算唯一值?

时间:2014-01-24 18:21:37

标签: sql

我从表中提取两列,以便返回具有当前日期日期的特定行,但仅返回当前日期。例如,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

因为那些只有一个唯一的日期。它不会返回铅笔,因为它有多个唯一的日期。

1 个答案:

答案 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
;