我有一个如下表格,我需要找到每周的数据计数。
Name Null Type
------------------- ---- -------------
DATE_ENTERED VARCHAR2(100)
TIME_ENTERED VARCHAR2(100)
USER_ID VARCHAR2(100)
STATUS VARCHAR2(100)
FAILEDLOGINATTEMPTS VARCHAR2(100)
ACCOUNTLOCKED VARCHAR2(100)
RESPONSECODE VARCHAR2(100)
任何人都可以告诉我如何查找每周计数,每日计数查询如下。
(select "DATE", sum("SUCCESS COUNT") as "SUCCESS COUNT", sum("FAILURE
COUNT") as "FAILURE COUNT", sum("LOCKED COUNT") as "LOCKED COUNT"
from (select to_char(to_date(date_entered,'YYYY-MON-DD'),'YYYY-MON-DD') as
"DATE", decode(status,'Success',1,0) as "SUCCESS COUNT",
decode(status,'Success',0,1) as "FAILURE COUNT",
decode(accountlocked,'1',1,0) as "LOCKED COUNT"
from invest_sixmonths ) t1
group by "DATE") order by "DATE";
答案 0 :(得分:0)
首先,将字符串列用于日期数据类型并不是一个好主意,因为它将来会给你类似的问题。
现在回到问题,当您执行to_char(to_date(date_entered||' '||TIME_ENTERED,'YYYY-MON-DD HH24:MI:SS'),'YYYY-MON-DD HH24') AS "DATE"
时,您只从hour
和date
级联中提取一天中的time
部分。因此group by
此派生列应该为您提供聚合值group by
小时。
例如
select to_char
(to_date(
date_entered||' '||TIME_ENTERED,
'YYYY-MON-DD HH24:MI:SS
')
,'YYYY-MON-DD HH24'
)
from
(select '2017-JAN-01' as date_entered
,'21:43:54' as time_entered
from dual)
这将为您2017-JAN-01 21
提供group by
。所以你已经得到了hourly
结果。
但是,如果您使用trunc
提取hour
,如下所示会更好
select trunc(to_date(
date_entered||' '||TIME_ENTERED,
'YYYY-MON-DD HH24:MI:SS
')
,'HH24')
from
(select '2017-JAN-01' as date_entered
,'21:43:54' as time_entered
from dual)
输出的数据类型为date
,它将被截断为最接近的小时。在NLS_DATE_PARAMETER
为DD-MON-YY HH24:MI:SS
的客户端,我看到了这一点。
23-JAN-17 21.00.00
在group by
。
答案 1 :(得分:0)
使用TRUNC()
将日期截断为小时开头,然后GROUP BY
:
SELECT TRUNC( TO_DATE( date_entered || time_entered, 'YYYY-MON-DDHH24:MI:SS' ), 'HH24' )
AS "DATE",
COUNT( CASE status WHEN 'Success' THEN 1 END ) AS success_count,
COUNT( CASE status WHEN 'Success' THEN NULL ELSE 1 END ) AS failure_count,
COUNT( CASE accountlocked WHEN '1' THEN 1 END ) AS locked_count
FROM invest_logs
GROUP BY
TRUNC( TO_DATE( date_entered || time_entered, 'YYYY-MON-DDHH24:MI:SS' ), 'HH24' )
ORDER BY
"DATE"
您也可以使用TO_CHAR()
:
TO_CHAR(
TO_DATE( date_entered || time_entered, 'YYYY-MON-DDHH24:MI:SS' ),
'YYYY-MON-DD HH24'
) AS "DATE",