查找商品的价格是否已更改

时间:2012-01-23 17:50:43

标签: sql sql-server-2008

这可能很容易,但我有一个表按价格列出项目并且每个项目都有一个版本号,所以有重复的项目具有相同的itemID和项目名称,但不同的版本可能有不同的价格。我想要一个简单的sql语句来检查价格已经改变的项目

itemid | item | price  |version | date
1         a      1.13    1        2011-12-01
2         b      5.13    1        2011-12-01
3         c      3.66    1        2011-12-01
4         a      1.03    2        2012-01-09
5         b      5.13    2        2012-01-09
6         c      3.33    2        2012-01-09  

会有很多版本,所以我猜需要某种比较功能,但不确定从SQL开始的位置。

因此,上面的示例我只想取回商品ac,因为价格已从之前的版本发生变化。

4 个答案:

答案 0 :(得分:2)

尝试:

SELECT item, COUNT(DISTINCT price) prices
FROM yourTable
/* WHERE clause would go here */
GROUP BY item
HAVING COUNT(DISTINCT price) > 1

可选择包括:

WHERE version in (1,2)

- 如果您只想比较特定版本1和2。

答案 1 :(得分:1)

这为您提供了价格与之前版本相比发生变化的项目列表:

WITH V AS (
  SELECT MAX(version) CurrentFileVersion
  FROM yourTable
), C AS (
  SELECT item, price, version
  FROM yourTable INNER JOIN V ON yourTable.version = V.CurrentFileVersion
), P AS (
  SELECT item, price, version
  FROM yourTable INNER JOIN V ON yourTable.version = (V.CurrentFileVersion - 1)
)
SELECT C.item
FROM C INNER JOIN
     P ON C.item = P.item
WHERE C.price <> P.price;

这甚至显示了所有中间步骤。老实说,我不能让它比这更简单或明确。

答案 2 :(得分:1)

试试这个

SELECT * FROM Prices T
where exists (
SELECT 1 from Prices
    where item = T.item and version = T.version - 1 and price != T.price
)

聚苯乙烯。使用您的表名更改“价格”

答案 3 :(得分:0)

我将假设您希望此信息使用此表中的数据更新您的表格。

我会在临时表或CTE中提取每个记录的最新版本。我会运行MERGE语句来插入任何新记录或更新任何价格与现有价格不同的地方。