我有一个看起来像这样的表:
ID Date Size Marked
1 2010-02-02 2 X
2 2002-02-02 1
1 2010-02-03 2 X
2 2010-02-03 3
3 2010-02-03 4 X
我有一个代码 (PHP) 可以执行以下操作: a) 计算每天的尺寸总和 b) 求出今天和最后一天的总数之差。 c) 找出今天被标记的行的大小总和(具有相同 id 的行昨天没有被标记)。
例如,我将得到以下结果:
Date Total DiffWithYesterday MarkedThisDay
2010-02-02 3 0 0
2010-02-03 9 6 4
我觉得有一种方法可以用 SQL 来写这个。然而,我的 SQL 很弱,所以在玩了一天内连接、分组依据和嵌入式选择之后我放弃了。
如果你能给我一些线索,我将不胜感激。
哦.. 我正在使用 MySQL。
问候, 维克多
最佳答案
玩得很开心。
SELECT
today.date as Date,
today.total as Total,
(today.total - yesterday.total) as DiffWithYesterday ,
marked.total as MarkedThisDay
FROM
(SELECT date, sum(size) as total
FROM table_name
GROUP BY date) today
LEFT JOIN
(SELECT date, sum(size) as total
FROM table_name
WHERE marked = 'X'
GROUP BY date) marked ON today.date = marked.date
LEFT JOIN
(SELECT (date + INTERVAL 1 day) as date, sum(size) as total
FROM table_name
GROUP BY date) yesterday ON today.date=yesterday.date
显然,您需要将“table_name”替换为您的表的名称
关于mysql - SQL。如何在同一张表的不同行中工作/比较/查找差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2197008/