输入:
Date Price
12/27 5
12/21 5
12/20 4
12/19 4
12/15 5
所需输出: 设定价格的最早日期与当前价格相比较。 例如,自 12/21 以来,价格一直是5。
答案不能是12/15,因为我们有兴趣找到价格与当前价格相同而不改变价值的最早日期(12月20日,价格已经变为4)
答案 0 :(得分:2)
这应该是正确的。您没有提供表格结构或名称,所以......
DECLARE @CurrentPrice MONEY
SELECT TOP 1 @CurrentPrice=Price FROM Table ORDER BY Date DESC
SELECT MIN(Date) FROM Table WHERE Price=@CurrentPrice AND Date>(
SELECT MAX(Date) FROM Table WHERE Price<>@CurrentPrice
)
在一个查询中:
SELECT MIN(Date)
FROM Table
WHERE Date >
( SELECT MAX(Date)
FROM Table
WHERE Price <>
( SELECT TOP 1 Price
FROM Table
ORDER BY Date DESC
)
)
答案 1 :(得分:0)
这个问题没有任何意义所以我不能100%确定你的目标。
创建四列,old_price,new_price,old_date,new_date。
!如果old_price === new_price,只需打印old_date即可。
答案 2 :(得分:0)
您使用的数据库服务器是什么?如果是Oracle,我会使用他们的窗口函数。无论如何,这是一个在mysql中运行的快速版本:
以下是示例数据:
+------------+------------+---------------+
| date | product_id | price_on_date |
+------------+------------+---------------+
| 2011-01-01 | 1 | 5 |
| 2011-01-03 | 1 | 4 |
| 2011-01-05 | 1 | 6 |
+------------+------------+---------------+
以下是查询(仅当您有1个产品时才有效 - 必须在where子句中添加“和product_id = ...”条件,否则)。
SELECT p.date as last_price_change_date
FROM test.prices p
left join test.prices p2 on p.product_id = p2.product_id and p.date < p2.date
where p.price_on_date - p2.price_on_date <> 0
order by p.date desc
limit 1
在这种情况下,它将返回“2011-01-03”。
不是一个完美的解决方案,但我相信它有效。但是,尚未对更大的数据集进行测试。
确保在date和product_id上创建索引,否则会使您的数据库服务器瘫痪并请求怜悯。
伯纳。