0

基本上,我有两个表 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 存在于具有相同时间戳的两个表中(忽略时间部分),则即使在同一天内存在多个相同 ID 的条目,也将此计数视为 1。

4

1 回答 1

0

这是一个工作演示

询问:

  ;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    
于 2013-07-11T18:23:34.130 回答