2013-01-15 50 views
1

我想計算兩個數據庫之間的時間戳,但由於不是我的設計缺陷,因此一個具有重疊的時間戳。計算視圖中兩個數據庫之間偏移量的時間戳

SELECT date(time + INTERVAL 8 HOUR) as day, COUNT(DISTINCT comment) 
FROM news.data 
GROUP BY day 
    UNION ALL 
SELECT date(time + INTERVAL 8 HOUR) as day, COUNT(DISTINCT comment) 
FROM`news-backup`.`data` 
GROUP BY day 
ORDER BY year(day) desc, day(day) DESC 
LIMIT 20 

有什麼事發生,有兩個數據庫的範圍內的一些時間戳,使他們產生了一定的日期分開計數。因此,它會給出算上今天從新聞和新聞的備份

EX: 
date  count 
2013-1-15 10 
2013-1-15 13 
2013-1-14 8 
2013-1-13 15 

我要的是

EX: 
date  count 
2013-1-15 23 
2013-1-14 8 
2013-1-13 15 

這裏是踢球,我需要在一個視圖中,所以有與一些限制(不允許子查詢)。思考?不,我不能更改數據庫之間發生的數據轉儲序列

+0

不確定,我嘗試將subquerrys放在VIEW中,它給了我一個錯誤 「SQL ERROR 1349:ciews select在from子句中包含suquerry」 – rodling

+0

對不起。 。 。該文件是真的誤導。在一個地方說它允許子查詢,並在另一個地方,他們是不允許的。 –

回答

0

您不能在視圖中放置子查詢,但可以將視圖放入視圖中。

所以:

create view1 as 
    SELECT date(time + INTERVAL 8 HOUR) as day, 'current' as which, COUNT(DISTINCT comment) as cnt 
    FROM news.data 
    GROUP BY day 
     UNION ALL 
    SELECT date(time + INTERVAL 8 HOUR) as day, 'backup' as which, COUNT(DISTINCT comment) as cnt 
    FROM`news-backup`.`data` 
    GROUP BY day, which 

我不知道你是什麼邏輯將它們組合在一起:

create view2 as 
    select day, max(cnt) -- sum(cnt)? prefer current or backup? 
    from view1 
    group by day 
    ORDER BY day desc 

,禁止子查詢的文檔here。一定要搜索「SELECT語句不能包含」。

如果你有所有日期的表,下面的「荒謬」 SQL可能的工作:

select c.date, 
     coalesce((select count(distinct comment) from news.data where date(time + INTERVAL 8 HOUR) = c.date), 
       (select count(distinct comment) from news_backup.data where date(time + INTERVAL 8 HOUR) = c.date) 
       ) as NumComments 
from calendar c 

這個版本假設你想要的「新」,然後再備份。如果你想要的總和,那麼你會添加它們。

+1

@eggyal。 。 。請進一步閱讀,其中是「SELECT語句不能在FROM子句中包含子查詢」。糟糕的文檔。 –

+0

沒有雙視圖的任何其他可能的解決方案? – rodling

+0

好像沒有簡單的辦法 – rodling

相關問題