Sql oracle在一系列日期内的总和计数

Sql oracle在一系列日期内的总和计数,sql,oracle,select,count,Sql,Oracle,Select,Count,我有一个Oracle表,它有过去两年中每天的记录。日期表只有一列存储日期值。 我有第二个表记录打开的电子邮件。这些列是订阅服务器id, 打开的时间,消息id 我想制作一份报告,其中包括日期表和 还有一个唯一订户ID的计数,这些ID在过去180天的opens表中有一条记录。 我希望这样做,而不使用循环,但如果这是唯一的选择,我愿意接受建议 您可以联接两个表并应用聚合count函数: SELECT d.date_column, COALESCE(COUNT(DISTINCT subscribe

我有一个Oracle表,它有过去两年中每天的记录。日期表只有一列存储日期值。 我有第二个表记录打开的电子邮件。这些列是订阅服务器id, 打开的时间,消息id

我想制作一份报告,其中包括日期表和 还有一个唯一订户ID的计数,这些ID在过去180天的opens表中有一条记录。
我希望这样做,而不使用循环,但如果这是唯一的选择,我愿意接受建议

您可以联接两个表并应用聚合
count
函数:

SELECT    d.date_column, COALESCE(COUNT(DISTINCT subscriber_id), 0)
FROM      dates d
LEFT JOIN subscribsers s ON d.date_column = TRUNC(s.time_opened) 
WHERE     d.date_column >= SYSDATE - 180
GROUP BY  d.date_column

如果您提供一些代码,例如表的ddl和带有示例数据的插入,您就有更好的机会得到一些答案。然后还可以显示预期结果。此查询将仅返回dates表中最近六个月的日期值。sysdate-180需要应用于subscribers表。联接在日期上,因此相当等效。Brian,如果您想包括所有日期,无论是否有订阅,则sysdate-180需要应用于dates表。Mureinik,您的查询不正确。WHERE子句有效地将左连接转换为内部连接。您应该将WHERE子句移动到左侧联接(在本例中,将WHERE替换为AND)。