我需要在 SQL中比较两个不同日期的数据。而且我真的需要在单个查询中使用它,因为我需要在分页中使用结果。问题是,当我进行自我加入时,它会导致重复列,因为INNER JOIN
它是笛卡尔积。
这是sql fiddle上的代码
例如
SELECT * FROM `my_table` as t1
INNER JOIN my_table t2 ON t1.quality = t2.quality
WHERE (
t1.day = '2015-01-08' OR t1.day = '2015-01-09' OR
t2.day = '2015-01-08' OR t2.day = '2015-01-09'
)
两个问题:
- 我如何重写 go get one row per JOIN on quality?
- 如果某一天缺少一些相应的行(关于质量),它仍然有效吗?
编辑
这是输入:
INSERT INTO my_table
(quality, quantity, day)
VALUES
('A', 1, '2015-01-15'),
('B', 2, '2015-01-15'),
('B', 0, '2015-01-10');
所需的输出是:
QUALITY | QUANTITY | T1.QUANTITY - T2.QUANTITY
A 1 0 (or NULL?)
B 2 2
解释:
每个日期都有唯一的值。所以我们只看到 A 和 B 质量。对于 B- 在另一个日期有适当的 B。对于 A - 没有。因此 B 的差值为 2(较高的日期减去较低的日期)。A 的差值为 0,因为没有什么可减去的。