计算一年中每个月第一天的记录

时间:2020-03-04 07:16:15

标签: sql oracle

我有一个包含4列巨大记录的表。它具有以下结构:

DATE_ENTERED    EMP_NAME     DATA       ORIGINATED
01-JAN-20        A          545454        APPLE

我想计算一年中每个月的第一天的记录数

我们有什么方法可以获取每月第一天的数据。

4 个答案:

答案 0 :(得分:1)

在oracle中,您可以在日期上使用TRUNC函数,如下所示:

SELECT TRUNC(DATE_ENTERED), COUNT(1) AS CNT
FROM YOUR_TABLE
WHERE TRUNC(DATE_ENTERED) = TRUNC(DATE_ENTERED, 'MON')
GROUP BY TRUNC(DATE_ENTERED, 'MON')

请注意,TRUNC(DATE_ENTERED, 'MON')返回DATE_ENTERED的月份的第一天。

干杯!

答案 1 :(得分:0)

SELECT Year, Month, COUNT(*)
FROM
(
  SELECT 
  YEAR(DATE_ENTERED) Year
  MONTH(DATE_ENTERED) Month
  DAY(DATE_ENTERED) Day
  FROM your_table
  WHERE DAY(DATE_ENTERED) = 1
) A 
GROUP BY Year, Month

通常WHERE DAY(DATE_ENTERED) = 1仅会为您提供每个月初的日期记录。因此,您可以使用“年和月”功能对它们进行分组,以便获得每年和每月的计数

答案 2 :(得分:0)

您可以使用类似这样的内容:

select * from your_table
where DAY(DATE_ENTERED) = 1
and DATE_ENTERED between '2020-01-01' and '2020-12-31'

使用计数:

select count(*) from your_table
where DAY(DATE_ENTERED)= 1
and DATE_ENTERED between '2020-01-01' and '2020-12-31'

更新

select * from your_table where Extract(day FROM DATE_ENTERED) = 1 and DATE_ENTERED between '01-JAN-20 ' and '01-DEC-20 ';

这是数据的样子:

enter image description here

用于记录列表

select count(*) from your_table where Extract(day FROM DATE_ENTERED) = 1 and DATE_ENTERED between '01-JAN-20 ' and '01-DEC-20 ';

enter image description here

UPDATE-2

select EXTRACT(month from DATE_ENTERED) as Count, 
to_char(to_date(DATE_ENTERED, 'DD-MM-YYYY'), 'Month') from your_table 
where Extract(day FROM DATE_ENTERED) = 1 and DATE_ENTERED between '01-JAN-20 
'and '01-DEC-20 ' group by EXTRACT(month from DATE_ENTERED),  
to_char(to_date(DATE_ENTERED, 'DD-MM-YYYY'), 'Month');

以下是输出:

enter image description here

答案 3 :(得分:0)

您的意思是

SELECT COUNT(*) 
FROM Table 
WHERE DAY(DATE_ENTERED) = 1 AND
      YEAR(DATE_ENTERED) = Some_Year
GROUP BY DATE_ENTERED

如果性能存在问题,也可以使用DATE_ENTERED BETWEEN 'YYYY0101' and 'YYYY1231'(用YYYY替换要检索其数据的年份)代替YEAR(DATE_ENTERED) = Some_Year