首页 > 解决方案 > 查询过滤列与同一表中的其他列

问题描述

像这样的表:

create_adte     info            close_date
-------------------------------------------
2018-10-05  DTS2018100500723    2018-10-23
2018-10-30  DTS2018103001638    2018-10-05
2019-03-01  DTS2019030102931    2018-10-05
2018-10-05  DTS2019030105944    2019-05-18
2018-10-05  DTS2019030108602    2019-05-29

我想在一天内创建 num 并关闭 num

如上:2018-10-05创建3条记录,2018-10-05关闭2条记录,不是在同一天创建和关闭

我试过这样,但它不起作用

select a.create_date,count(a.create_date) as new_dts_num,countIf(a.create_date=b.close_date)
from dts a,dts b
group by  a.create_date
order by new_dts_num desc

标签: sql

解决方案


我很确定您已经知道,但这countif不是有效的 SQL 命令。我认为处理这个问题的正常方法是使用CasewithSum语句。你也不想加入(如果你想加入的话,你会想......加入,你所做的就是将每一行加入到每一行)。所以像:

select create_date,count(create_date) as new_dts_num ,
    sum(case when created_date = close_date then 1 else 0 end) as dts_same
from dts
group by create_date
order by new_dts_num desc

这会重现您正在尝试做的事情。你解释的有点不同。如果您只想要它们相同的行(这就是您解释它的方式),那么不需要所有计数/等,只需将其作为 where 子句的一部分:

select create_date,count(*) as new_dts_num 
from dts
where create_date = close_date
group by create_date
order by new_dts_num desc

推荐阅读