简体   繁体   English

如何在 Oracle 中按日期而不是日期时间分组?

[英]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).它只有DATETIMESTAMP并且都始终包含时间组件(即使您使用的用户界面可能选择仅显示日期组件,它仍然始终具有时间组件)。

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

fiddle小提琴

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM