这可能很容易,但我有一个表按价格列出项目并且每个项目都有一个版本号,所以有重复的项目具有相同的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开始的位置。
因此,上面的示例我只想取回商品a
和c
,因为价格已从之前的版本发生变化。
答案 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语句来插入任何新记录或更新任何价格与现有价格不同的地方。