SQL/ORACLE--仅在所有条件下"1"计算非重复返回


SELECT
TAB1.TYPE,
TAB1.BILL_CYCLE,
COUNT(DISTINCT BILL_CYCLE)
FROM TAB1
WHERE TAB1.BILL_CYCLE BETWEEN '15-SEP-2022 4' AND '30-NOV-2022 4' 

在where子句中提供的日期范围应该有9个不同的BILL_CYCLE值,但是我只得到一个。您可以在下面看到顶部查询的结果:

BLI_Type                      BILL_CYCLE           COUNT(DISTICT BILL_CYCLE)
Total Due                  22-SEP-2022 04:00:00            1
Credits                    17-NOV-2022 05:00:00            1
Previous                   17-NOV-2022 05:00:00            1

原始数据样本:

<表类>IDORG_NAMEBLI_TYPE总BILL_CYCLEtbody><<tr>1KK总-14115 - 9月- 2022年4:00:001KK指控222022年- 11月22日4:00:001KK信用2808 - 10月- 2022 5:00:001KK指控-93015 - 9月- 2022年4:00:002DD之前的36015 - 9月- 2022年4:00:00

如果日期值存储为日期(而不是字符串),则应该修复此问题并将日期与日期进行比较,而不是将日期与字符串进行比较:

SELECT
TAB1.TYPE,
TAB1.BILL_CYCLE,
COUNT(DISTINCT BILL_CYCLE)
FROM TAB1
WHERE TAB1.BILL_CYCLE BETWEEN to_date('15.09.2022 04:00:00', 'dd.mm.yyyy hh24:mi:ss')
AND to_date('30.11.2022 04:00:00', 'dd.mm.yyyy hh24:Mi:Ss')
GROUP BY tab1.type, tab1.bill_cycle;
除此之外,似乎每个时间戳都是唯一的,所以这就是为什么您得到1的原因。也许您想要计算截断到例如day的行数-那么您将
select type, trunc(bill_cycle), count(distinct trunc(bill_cycle))
from tab1
WHERE TAB1.BILL_CYCLE BETWEEN to_date('15.09.2022 04:00:00', 'dd.mm.yyyy hh24:mi:ss')
AND to_date('30.11.2022 04:00:00', 'dd.mm.yyyy hh24:Mi:Ss')
group by type, trunc(bill_cycle);

你可以这样做,而不是,而是小时;没问题,只要把它包含到查询中就行了。

最新更新