查询以获取每天的计数

时间:2013-07-11 18:06:52

标签: sql-server sql-server-2008-r2

基本上,我有两个表table1和table2

这些是这些表格的输出。

 This is the sample output of table1,
   ID        PDATE
   4    2013-04-16T17:47:49
   4    2013-04-16T17:36:40
   5    2013-04-16T17:58:23
   5    2013-04-16T17:37:47
   11   2013-04-17T17:51:28
   5    2013-04-17T18:10:28
   4    2013-04-17T18:10:14
   11   2013-04-17T17:39:11

 This is the sample output of table 2,
   ID          RDATE
    4   2013-04-16T17:42:58
    5   2013-04-16T17:55:22
    5   2013-04-19T17:31:07
    5   2013-04-19T17:16:03
    5   2013-04-19T17:00:50
    4   2013-04-19T17:06:34
    17  2013-04-19T17:57:32

我想加入这些表格,并在一周内获得每天ID号码计数的输出。 由于两个输出中的日期列都是日期+时间(U可以忽略时间部分,只考虑日期部分)

我的预期输出应该是,

    ID        COMBINEDDATE
     2         2013-04-16
     3         2013-04-17
     0         2013-04-18
     3         2013-04-19

以上输出基于两个表的输出。

注意:如果具有相同时间戳的两个表中都存在相同的ID(忽略时间部分) 即使同一天内存在多个相同身份证的条目,也要将此计数视为1。

1 个答案:

答案 0 :(得分:0)

这是working demo

查询:

  ;with 
  Datas(ID, PDate) as
   (
      select ID, cast(convert(varchar, PDate, 101) as datetime) PDate
      from TableA
      union all
      select ID, cast(convert(varchar, PDate, 101) as datetime) PDate
      from TableB
    ),
  Dates(PDate, MaxPDate) as
    (
      select min(PDate) PDate, max(PDate) MaxPDate
      from Datas
      union all
      select PDate + 1 PDate, MaxPDate
      from Dates
      where
        (PDate + 1) <= MaxPDate
    )
  select count(distinct ID), convert(varchar, Dates.PDate, 101) PDate
  from 
    Dates
    left join Datas on Dates.PDate = Datas.PDate
  group by Dates.PDate
  order by 2