查询过滤器列与同一表中的其他列

时间:2019-06-06 04:01:46

标签: sql

这样的表:

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

2 个答案:

答案 0 :(得分:0)

您不需要将表自身连接起来,只需要比较两列:

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

答案 1 :(得分:0)

我很确定您已经知道,但是countif不是有效的SQL命令。我认为处理此问题的正常方法是使用带有Case的{​​{1}}语句。另外,您也不想加入(如果您想...加入,那么您所做的就是将每一行连接到其他每一行)。像这样:

Sum

这将重新创建您尝试执行的操作。您的解释有些不同。如果只希望行相同(说明的方式),则不需要所有计数/等,只需将其作为where子句的一部分即可:

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