2013-07-11 142 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