[英]How to group by date and not datetime in Oracle?
I have few columns which are time and method etc. I need to display the operations performed on a day.我的时间和方法等列很少。我需要显示一天执行的操作。
time,method
01-Sep-2022,1
01-Sep-2022,2
01-Sep-2022,2
01-Sep-2022,3
01-Sep-2022,3
01-Sep-2022,3
02-Sep-2022,1
03-Sep-2022,1
04-Sep-2022,1
Output
time,method
01-Sep-2022,1,1
01-Sep-2022,2,2
01-Sep-2022,3,3
02-Sep-2022,1,1
03-Sep-2022,1,1
04-Sep-2022,1,1
How to write the Oracle query?如何编写 Oracle 查询?
you should use group by time,method.您应该按时间、方法使用分组。
CREATE TABLE timdt
(
time date,
method int
);
INSERT INTO timdt (time,method)VALUES('01-Sep-2022', '1');
INSERT INTO timdt (time,method)VALUES('01-Sep-2022', '2');
INSERT INTO timdt (time,method)VALUES('01-Sep-2022', '2');
INSERT INTO timdt (time,method)VALUES('01-Sep-2022', '3');
INSERT INTO timdt (time,method)VALUES('01-Sep-2022', '3');
INSERT INTO timdt (time,method)VALUES('01-Sep-2022', '3');
INSERT INTO timdt (time,method)VALUES('02-Sep-2022', '1');
INSERT INTO timdt (time,method)VALUES('03-Sep-2022', '2');
INSERT INTO timdt (time,method)VALUES('04-Sep-2022', '3');
select time,method,count(*) from timdt group by time,method order by time,method;
OUTPUT: OUTPUT:
TIME METHOD COUNT(*)
01-SEP-22 1 1
01-SEP-22 2 2
01-SEP-22 3 3
02-SEP-22 1 1
03-SEP-22 2 1
04-SEP-22 3 1
How to group by date and not datetime in Oracle?如何在 Oracle 中按日期而不是日期时间分组?
Oracle does not have a DATETIME
data-type; Oracle 没有DATETIME
数据类型; it only has DATE
and TIMESTAMP
and both always contain a time component (even if the user interface you are using may choose to only display the date component, it still always has a time component).它只有DATE
和TIMESTAMP
并且都始终包含时间组件(即使您使用的用户界面可能选择仅显示日期组件,它仍然始终具有时间组件)。
To group by the date component, use the TRUNC
function to truncate the time component back to midnight so that all values on the same day have the same truncated time:要按日期组件分组,请使用TRUNC
function 将时间组件截断回午夜,以便同一天的所有值都具有相同的截断时间:
SELECT TRUNC(time) AS day,
method,
count(*)
FROM table_name
GROUP BY TRUNC(time), method
ORDER BY day, method;
Which, for the sample data:其中,对于样本数据:
CREATE TABLE table_name (time, method) AS
SELECT DATE '2022-09-01' + INTERVAL '1' HOUR, 1 FROM DUAL UNION ALL
SELECT DATE '2022-09-01' + INTERVAL '2' HOUR, 2 FROM DUAL UNION ALL
SELECT DATE '2022-09-01' + INTERVAL '3' HOUR, 2 FROM DUAL UNION ALL
SELECT DATE '2022-09-01' + INTERVAL '4' HOUR, 3 FROM DUAL UNION ALL
SELECT DATE '2022-09-01' + INTERVAL '5' HOUR, 3 FROM DUAL UNION ALL
SELECT DATE '2022-09-01' + INTERVAL '6' HOUR, 3 FROM DUAL UNION ALL
SELECT DATE '2022-09-02' + INTERVAL '7' HOUR, 1 FROM DUAL UNION ALL
SELECT DATE '2022-09-03' + INTERVAL '8' HOUR, 1 FROM DUAL UNION ALL
SELECT DATE '2022-09-04' + INTERVAL '9' HOUR, 1 FROM DUAL;
Outputs:输出:
DAY天 | METHOD方法 | COUNT(*)数数(*) |
---|---|---|
2022-09-01 00:00:00 2022-09-01 00:00:00 | 1 1 | 1 1 |
2022-09-01 00:00:00 2022-09-01 00:00:00 | 2 2 | 2 2 |
2022-09-01 00:00:00 2022-09-01 00:00:00 | 3 3 | 3 3 |
2022-09-02 00:00:00 2022-09-02 00:00:00 | 1 1 | 1 1 |
2022-09-03 00:00:00 2022-09-03 00:00:00 | 1 1 | 1 1 |
2022-09-04 00:00:00 2022-09-04 00:00:00 | 1 1 | 1 1 |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.