动态创建新列并按该列排序

时间:2013-04-08 01:57:58

标签: mysql sql database

我有一张过去不同日期的商品价格表。这基本上就是我所拥有的:

Item      Price   Date
----------------------------
Item 1    1.83    04-06
Item 1    1.56    04-07
Item 2    2.37    04-06
Item 2    2.94    04-07
Item 3    0.68    04-06
Item 3    0.54    04-07

我想根据价格的变化对商品进行排序。我不知道如何使用MySQL来解决这个问题,这是否只能使用MySQL?

3 个答案:

答案 0 :(得分:0)

我假设您的表名为Items。像这样的东西?

SELECT t1.Price - t2.Price as PriceDiff, t2.* 
FROM Items as t1, Items as t2 
WHERE TO_DAYS(t1.Date) - TO_DAYS(t2.Date) = 1 AND t1.Item = t2.Item 
ORDER BY PriceDiff ASC

以下内容根据项目名称和前一天的项目匹配项目...您可能需要将日期列更改为日期时间,不确定其当前类型。

TO_DAYS(t1.date) - TO_DAYS(t2.date) = 1 AND t1.Item = t2.Item

如果您只想在特定日期更改价格,请添加AND Date = 'yourdate'

答案 1 :(得分:0)

要添加到Andy所说的内容,一般来说,每次你想要比较一个表与自身(即同一个表中两行之间的某个函数)时,你需要为函数中的每个变量加入一个连接。

SELECT i1.price as 'i1', i2.price as 'i2', i1.price-i2.price as priceDiff, i1.id
FROM itemPrice i1
JOIN itemPrice i2 on i1.id = i2.id
WHERE DATE_ADD(i1.pdate, INTERVAL -1 DAY) = i2.pdate
ORDER BY PRICEDIFF desc

http://sqlfiddle.com/#!2/3eec6/4

答案 2 :(得分:0)

以下sql应该做

SELECT Item, MAX(Price) - MIN(Price) as PriceDiff
FROM Table
GROUP BY Item
ORDER BY MAX(Price) - MIN(Price)