SQL ORACLE 按一个月中的所有天数分组
SQL ORACLE Grouping by all the days in a month
我有一个 table,其中有两列。一栏是时间戳,一栏是工时数量。
我需要再获取一个月 table,有两列。一个应该是当月的第几天,另一个应该是那一天的总和(劳动)。
我知道这很容易,但问题是当有一天没有任何劳动时,那一行就不会出现。我需要那一行,天数和零作为 sum(labor)
感谢您的帮助
我现在得到的table是
day labor
1 8
2 4
3 7
4 3
6 7
7 9
继续...
如您所见,第 5 天没有出现,因为这一天没有分娩
我需要那天看起来像...5,劳动 0
首先,您应该生成 天的日期范围(例如 2014 年到 2015 年之间),然后 left join
您的劳动力统计数据,shcematic 示例:
--generating days
WITH days AS
(SELECT DATE '2014-01-01' + LEVEL - 1 day1
FROM dual
CONNECT BY LEVEL <= DATE '2015-01-01' - DATE '2014-01-01')
SELECT day.day1, NVL(sum(labor.labor),0) labot_sum FROM days
LEFT JOIN labor ON trunc(labor.timestamp_col) = days.day1
GROUP BY days.day1
编辑
如果你有整数天,生成应该看起来像
SELECT LEVEL day1 FROM dual CONNECT BY LEVEL <= 365
我有一个 table,其中有两列。一栏是时间戳,一栏是工时数量。
我需要再获取一个月 table,有两列。一个应该是当月的第几天,另一个应该是那一天的总和(劳动)。
我知道这很容易,但问题是当有一天没有任何劳动时,那一行就不会出现。我需要那一行,天数和零作为 sum(labor)
感谢您的帮助
我现在得到的table是
day labor
1 8
2 4
3 7
4 3
6 7
7 9
继续...
如您所见,第 5 天没有出现,因为这一天没有分娩
我需要那天看起来像...5,劳动 0
首先,您应该生成 天的日期范围(例如 2014 年到 2015 年之间),然后 left join
您的劳动力统计数据,shcematic 示例:
--generating days
WITH days AS
(SELECT DATE '2014-01-01' + LEVEL - 1 day1
FROM dual
CONNECT BY LEVEL <= DATE '2015-01-01' - DATE '2014-01-01')
SELECT day.day1, NVL(sum(labor.labor),0) labot_sum FROM days
LEFT JOIN labor ON trunc(labor.timestamp_col) = days.day1
GROUP BY days.day1
编辑
如果你有整数天,生成应该看起来像
SELECT LEVEL day1 FROM dual CONNECT BY LEVEL <= 365