2013-01-15 51 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

相关问题