我有一个包含4列巨大记录的表。它具有以下结构:
DATE_ENTERED EMP_NAME DATA ORIGINATED
01-JAN-20 A 545454 APPLE
我想计算一年中每个月的第一天的记录数
我们有什么方法可以获取每月第一天的数据。
答案 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 ';
这是数据的样子:
用于记录列表
select count(*) from your_table where Extract(day FROM DATE_ENTERED) = 1 and DATE_ENTERED between '01-JAN-20 ' and '01-DEC-20 ';
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');
以下是输出:
答案 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
。