2013-07-11 56 views
0

基本上,我有两个表table1和表2查询得到每天的计数

这些是这些表的输出。

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。

+0

是什么阻止你?你在做什么你想做什么有问题?你说你想加入桌子,但也许你应该考虑桌子的联合呢?试试看看它会带来什么。或者如果您遇到的问题是有两个表,那么您可以显示仅为一个表执行作业的查询。 –

+0

如果结果应该反映给定日期的相同ID(忽略时间)两个表之间的JOIN,您能解释为什么4/17的结果为3吗?表2在该日期没有单行。 –

回答

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