【问题标题】:SQL Count Numbers of Projects started Each Day Between Two DatesSQL Count 在两个日期之间每天启动的项目数
【发布时间】:2013-11-22 14:42:01
【问题描述】:

我有这张表,我需要计算我每天开始了多少项目(工作)。

工作开始结束 1 2013 年 1 月 1 日 2013 年 4 月 1 日 2 2013 年 1 月 1 日 2013 年 2 月 1 日 3 2013 年 1 月 1 日 2013 年 3 月 1 日 4 2013 年 3 月 1 日 2013 年 4 月 1 日 5 2013 年 3 月 1 日 2013 年 4 月 1 日 6 2013 年 3 月 1 日 2013 年 4 月 1 日 ...

我想计算我每天开始了多少工作.. / 我的意思是每天有多少工作..

日期计数 01-01-2013 3 02-01-2013 3 03-01-2013 5 04-01-2013 4 05-01-2013 0 ...

【问题讨论】:

  • 你尝试过什么?
  • 你使用的是什么 rdbms?
  • 这似乎是每天活跃的工作数量,而不是每天开始的工作(从那时起答案似乎是 1 号和 3 号的 3 号和所有其他日子的 0 号)
  • 另外,您使用的是什么数据库系统,您是否已经有可用的日历表?

标签: sql date count


【解决方案1】:
select start, count(*) as jobs_per_day
from your_table
group by start

但这不会返回您没有创建任何工作的日期的记录。

【讨论】:

  • 添加 WHERE end < '01-01-2014' 假设这是结束日期。
【解决方案2】:

以下在 postgresql 中对我有用

with dates as (
  select aday::date
  from generate_series((select min(start) from your_table),
                       (select max(end) from your_table),
                       '1 day'::interval) aday
), flat as (
  select * 
  from dates, your_table 
  where dates.aday between your_table.start and your_table.end
)

select
  aday,
  count(*) as count

from flat

group by aday

order by aday
;

第一个 CTE 生成一系列日期,在另一个 RDBMS 中可能必须以不同的方式完成。

【讨论】:

    【解决方案3】:

    select start 作为日期,count(*) 作为 table_name 的计数 其中 start_date>="你的开始日期" 和 end_date

    【讨论】:

    • 这不会给出他正在寻找的输出,因为它只检查一个特定的开始和结束日期。
    猜你喜欢
    • 2021-11-24
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多