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
原始数据样本:
<表类>ID ORG_NAME BLI_TYPE 总 BILL_CYCLE tbody><<tr>1 KK 总 -141 15 - 9月- 2022年4:00:00 1KK 指控 22 2022年- 11月22日4:00:00 1KK 信用 28 08 - 10月- 2022 5:00:00 1KK 指控 -930 15 - 9月- 2022年4:00:00 2DD 之前的 360 15 - 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);
你可以这样做,而不是天,而是小时;没问题,只要把它包含到查询中就行了。