[英]SQLite - Output count of all records per day including days with 0 records
[英]How to count records for each day in a range (including days without records)
由于上次我没有真正正确地询问,因此我尝试对此问题进行一些细化。 我本质上是在做这个查询:
Select count(orders)
From Orders_Table
Where Order_Open_Date<=To_Date('##/##/####','MM/DD/YYYY')
and Order_Close_Date>=To_Date('##/##/####','MM/DD/YYYY')
其中## / ## / ####是同一天。 本质上,此查询旨在查找任何给定日期的“未平仓”订单数。 唯一的问题是我想在一年中的每一天或更长时间执行此操作。 我想如果我知道如何将## / ## / ####定义为变量,然后将计数按该变量分组,那么我可以使它起作用,但我不确定如何做到这一点-或在那里也可能是另一种方式。 我目前在SQL开发人员上使用Oracle SQL。 感谢您的任何投入。
假设您有一个表日期列表和adate列
aDate
1/1/2012
1/2/2012
1/3/2012
现在,您将其加入桌子
Select *
From Orders_Table
join datelist on Order_Open_Date<=adate and Order_Close_Date>=adate
这为您提供了您所关心的所有订单的列表,现在您可以进行分组并计算
Select aDate, count(*)
From Orders_Table
join datelist on Order_Open_Date<=adate and Order_Close_Date>=adate
group by adate
如果要传递参数,则只需使用递归cte生成日期
with datelist as
(
select @startdate as adate
UNION ALL
select adate + 1
from datelist
where (adate + 1) <= @lastdate
)
Select aDate, count(*)
From Orders_Table
join datelist on Order_Open_Date<=adate and Order_Close_Date>=adate
group by adate
注意:我没有要测试的Oracle数据库,因此该平台的语法可能不正确,但是您可以理解。
注意2:如果您希望所有没有日期的日期都用0列出,则将其用作选择语句:
Select aDate, count(Order_Open_Date)
From Orders_Table
left join datelist on Order_Open_Date<=adate and Order_Close_Date>=adate
group by adate
您可以使用这样的“行生成器”技术(针对Hogan的评论进行编辑) :
Select RG.Day,
count(orders)
From Orders_Table,
(SELECT trunc(SYSDATE) - ROWNUM as Day
FROM (SELECT 1 dummy FROM dual)
CONNECT BY LEVEL <= 365
) RG
Where RG.Day <=To_Date('##/##/####','MM/DD/YYYY')
and RG.Day >=To_Date('##/##/####','MM/DD/YYYY')
and Order_Open_Date(+) <= RG.Day
and Order_Close_Date(+) >= RG.Day - 1
Group by RG.Day
Order by RG.Day
这应该列出上一年的每一天以及相应的订单数量
如果只想一天,您可以使用TRUNC
这样查询
select count(orders)
From orders_table
where trunc(order_open_date) = to_date('14/05/2012','dd/mm/yyyy')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.