需要MySQL比较查询的帮助吗
新年快乐 我在创建一个MySQL查询来比较一些DB条目时遇到了一点问题 有一个名为prices的表,如下所示:需要MySQL比较查询的帮助吗,mysql,select,Mysql,Select,新年快乐 我在创建一个MySQL查询来比较一些DB条目时遇到了一点问题 有一个名为prices的表,如下所示: {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,
{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&error,我尝试的其他查询现在不存在。
我对样本数据的预期结果如下:
{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}
谢谢你的想法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);
我认为这会产生结果,我需要。谢谢! 如果两个日期都可能不存在该项目。。。然后,您可能需要模拟完整的外部联接,并使用左/右联接和并集
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
)
您已经尝试了哪些语句?始终显示您的位置您当前的SQL语句是什么?在展示你的作品时,你会得到更多的帮助。此外,请提供预期结果。知道你期望看到什么有助于澄清你的问题。我的方法是为每个时间段生成2个数据集1,然后将这些数据集连接在一起,然后使用case语句来比较相同项目的每个数据集之间的价格。如果存在差异,请列出记录。并显示您希望从同一数据示例获得的结果。请参阅@草莓:谢谢,但这没有帮助。我认为这个小表不需要CREATE语句。您不需要创建视图。您可以将select语句替换为内联视图,将表名oldData和Newdata替换为select语句作为oldData,将select语句作为Newdata,但如果不这样,我认为这将实现您的目标。但是,这确实假设该项存在于两个数据集中。如果一个项只存在于两个数据集中的一个数据集中,则需要使用左连接和右连接的联合,因为mySQL不支持完全的外部连接。并更改要包含的位置或olddata.item为null或newdata.item为null`谢谢您的时间!这对我很有用。祝你一周愉快!