mysql - SQL。如何在同一张表的不同行中工作/比较/查找差异

标签 mysql sql comparison

我有一个看起来像这样的表:

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/

相关文章:

php - 用数据库信息填写下拉菜单?

mysql - 如何创建查询以避免 'subquery returns more than 1 row'

c++ - 检查指针是否指向数组

python - 如何使用 Python 测试唯一字符串和重复字符串(不同大小写)

mysql - 如何使用我的示例中的 codeigniter 或 mysql 查询显示数据

mysql - 给定两个用户,选择两个用户评分的每个帖子,以及每个用户对每个帖子的评分

mysql - VB.NET 连接到 MySQL 服务器数据库

mysql - LEFT JOIN 两个表

sql - python 中 cx_Oracle 在一个事务中包含许多 SQL DML 语句

arrays - 将数组传递到 block 中