繁体   English   中英

如何计算范围内每天的记录(包括没有记录的天数)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM