需要MySQL比较查询的帮助吗

需要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,

新年快乐

我在创建一个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,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`谢谢您的时间!这对我很有用。祝你一周愉快!