SELECT date_time,
case when COUNT(*) >= 1 then 1 else 0 end CNT
FROM table
WHERE bid='BD11' AND
date_time BETWEEN TO_DATE ('2015/08/01', 'yyyy/mm/dd') AND
TO_DATE ('2016/08/11', 'yyyy/mm/dd')
GROUP BY date_time
...这是我的查询 date_time计数
2015-08-01 1
2015-08-01 1
2015-08-01 1
2015-08-01 1
2015-08-01 1
2015-08-01 1
2015-08-02 1
2015-08-02 1
2015-08-02 1
2015-08-03 1
2015-08-03 1
2015-08-03 1
它打印出来就像是
2015-08-01 1
2015-08-02 1
2015-08-03 1
答案 0 :(得分:1)
添加' distinct'关键字到date_time在查询的选择部分
答案 1 :(得分:0)
使用不同或唯一。
SELECT trunc(date_time)
,count(*)
FROM table
WHERE bid='BD11' AND
date_time BETWEEN TO_DATE ('2015/08/01', 'yyyy/mm/dd') AND
TO_DATE ('2016/08/11', 'yyyy/mm/dd')
group by trunc(date_time)
答案 2 :(得分:0)
请查看您的查询中的一些漏洞。
首先,如果您希望每个日期的单个记录在唯一键上添加distinct或group by。
其次,您的case
将始终评估为1
。那么你为什么写它呢?这对我没有任何意义。
SELECT trunc(date_time),
case when COUNT(*) >= 1 then 1 else 0 end CNT
FROM table
WHERE bid='BD11' AND
date_time BETWEEN TO_DATE ('2015/08/01', 'yyyy/mm/dd') AND
TO_DATE ('2016/08/11', 'yyyy/mm/dd')
GROUP BY trunc(date_time);
参见演示:
with t_moored_buoy_rtqc (date_time, COUNT) AS ( /*****This is yoour table data***/
select TO_DATE ('2015/08/01 10:13:13', 'yyyy/mm/dd HH:MI:SS'),'1' from dual
union all
select TO_DATE ('2015/08/01 10:13:15', 'yyyy/mm/dd HH:MI:SS'),'1' from dual
union all
select TO_DATE ('2015/09/01 10:13:13', 'yyyy/mm/dd HH:MI:SS'),'1' from dual )
select trunc(date_time), case when COUNT(*) >= 1 then 1 else 0 end CNT
from t_moored_buoy_rtqc
group by trunc(date_time)
答案 3 :(得分:0)
如果您的date_time列实际上不包含时间,则group by和distinct版本应该正常工作。您能否确认仅在DB中存储日期,并且您正在使用的客户端未屏蔽时间部分?
[编辑]因为你也想要那个数:
select trunc(date_time) date_time,
case when count(*) > 1 then 1 else 0 end cnt
from table
where bid = 'BD11'
and date_time between to_date('2015/08/01', 'yyyy/mm/dd') and
to_date('2016/08/11', 'yyyy/mm/dd')
group by trunc(date_time);
我不明白你要用这个数量来完成什么 - 它总会返回1.请注意,我将“> =”更改为“>” - 因此,如果日期重复多次,则上述查询将返回1,如果只有一行具有日期,则返回0。
此查询将返回日期和时间:
select to_char(date_time, 'yyyy/mm/dd hh:mi:ss am') date_time
from table
where bid = 'BD11'
and date_time between to_date('2015/08/01', 'yyyy/mm/dd') and
to_date('2015/08/11', 'yyyy/mm/dd');
另外,您想要2016/08/11的数据吗?你写它的方式你不会得到当天的数据,除非它正好是午夜。如果您当天需要所有内容,请使用“> =”和“<”:
and date_time >= to_date('2015/08/01', 'yyyy/mm/dd')
and date_time < to_date('2015/08/12', 'yyyy/mm/dd')