我在创建MySQL查询以比较某些数据库条目时遇到了一些问题。
有一个名为price的表格如下:
{id,timestamp,item,priceCustomer1,priceCustomer2,priceCustomer3}
样本值:
{1,1483453891,"Paper A",2.99,2.70,1.90}
{2,1483453891,"Paper B",1.99,1.70,2.90}
{3,1483453891,"Paper C",4.99,3.70,3.90}
{4,1483453704,"Paper A",2.80,2.70,1.90}
{5,1483453704,"Paper B",1.90,1.75,2.90}
{6,1483453704,"Paper C",4.99,3.70,3.90}
在时间戳上可识别的不同时刻的不同商品的价格信息。 查询应比较最后两个时间戳中每个项目的三个价格,并列出至少一个价格不同的所有条目。
我的目标能理解吗?
我尝试过很多陈述,但现在我很绝望,不知道下次要做什么。
如果有人能帮助我,那将是非常好的。
非常感谢! 问候
编辑:
感谢您的快速回复!获取我尝试的最后两个时间戳的第一个查询就是这个:
SELECT date FROM prices GROUP BY date ORDER BY date DESC limit 2;
由于mysql控制台上的try&错误,我尝试过的其他查询现在还没有。 我希望样本数据的结果如下:
{1,1483453891,"Paper A",2.99}
{4,1483453704,"Paper A",2.80}
{2,1483453891,"Paper B",1.99,1.70}
{5,1483453704,"Paper B",1.90,1.75}
答案 0 :(得分:1)
感谢你的想法xQbert ......我想我找到了解决方案:
CREATE VIEW oldData AS
SELECT *
FROM prices
WHERE date= (SELECT date FROM prices GROUP BY date ORDER BY date DESC LIMIT 2 OFFSET 1);
CREATE VIEW newData AS
SELECT *
FROM prices
WHERE date= (SELECT date FROM prices GROUP BY date ORDER BY date DESC LIMIT 1);
SELECT *
FROM olddata JOIN newdata USING(item)
WHERE (olddata.priceCustomer1 <> newdata.priceCustomer1)
OR (olddata.priceCustomer2 <> newdata.priceCustomer2)
OR (olddata.priceCustomer3 <> newdata.priceCustomer3);
我认为这会产生结果,我需要。谢谢!
答案 1 :(得分:0)
如果该项目可能在两个日期都不存在......那么您可能需要模拟完整的外部联接并使用左/右联接和联合
SELECT * FROM (
SELECT *
FROM (SELECT *
FROM prices
WHERE date= (SELECT date
FROM prices
GROUP BY date
ORDER BY date DESC LIMIT 2 OFFSET 1)) oldData
LEFT JOIN (SELECT *
FROM prices
WHERE date= (SELECT date
FROM prices
GROUP BY date
ORDER BY date DESC LIMIT 1)) newData
USING(item)
WHERE (olddata.priceCustomer1 <> newdata.priceCustomer1)
OR (olddata.priceCustomer2 <> newdata.priceCustomer2)
OR (olddata.priceCustomer3 <> newdata.priceCustomer3)
OR newData.item is null
SELECT *
FROM (SELECT *
FROM prices
WHERE date= (SELECT date
FROM prices
GROUP BY date
ORDER BY date DESC LIMIT 2 OFFSET 1)) oldData
RIGHT JOIN (SELECT *
FROM prices
WHERE date= (SELECT date
FROM prices
GROUP BY date
ORDER BY date DESC LIMIT 1)) newData
USING(item)
WHERE (olddata.priceCustomer1 <> newdata.priceCustomer1)
OR (olddata.priceCustomer2 <> newdata.priceCustomer2)
OR (olddata.priceCustomer3 <> newdata.priceCustomer3)
OR oldData.item is null
)