SQL来查找上次更改价格的日期
输入: 所需输出: 与当前价格相比设定价格的最早日期。 例如,自12/21以来,价格一直为5SQL来查找上次更改价格的日期,sql,Sql,输入: 所需输出: 与当前价格相比设定价格的最早日期。 例如,自12/21以来,价格一直为5 答案不可能是2015年12月,因为我们希望找到最早的日期,即价格与当前价格相同但价值不变的日期。20年12月,价格已更改为4,这应该是正确的。您没有提供表结构或名称,因此 Date Price 12/27 5 12/21 5 12/20 4 12/19 4 12/15 5 在一个查询中: DECLARE @CurrentPrice MONEY SELECT TO
答案不可能是2015年12月,因为我们希望找到最早的日期,即价格与当前价格相同但价值不变的日期。20年12月,价格已更改为4,这应该是正确的。您没有提供表结构或名称,因此
Date Price
12/27 5
12/21 5
12/20 4
12/19 4
12/15 5
在一个查询中:
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
)
这个问题毫无意义,所以我不能100%确定你想要什么 创建四列,旧价格、新价格、旧日期、新日期
!!如果旧的价格===新的价格,只需打印旧的日期即可 您使用的是什么数据库服务器?如果是Oracle,我会使用他们的窗口功能。无论如何,这里有一个在mysql中运行的快速版本: 以下是示例数据:
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个产品时有效-将必须添加一个和产品\u id=。。。如果另有规定,则以where条款为条件
+------------+------------+---------------+
| date | product_id | price_on_date |
+------------+------------+---------------+
| 2011-01-01 | 1 | 5 |
| 2011-01-03 | 1 | 4 |
| 2011-01-05 | 1 | 6 |
+------------+------------+---------------+
在这种情况下,它将返回2011-01-03
这不是一个完美的解决方案,但我相信它是有效的。不过,我们还没有在更大的数据集上进行测试
确保在日期和产品id上创建索引,否则会使数据库服务器屈服并乞求宽恕
Bernardo。我假定您假定它是从OP的名称为SQL Server编写的。对吗?Price=@CurrentPrice也可以删除。@ypercube-我根据OP前面的问题假设了SQL Server。您的查询几乎肯定会执行得更好,但我通常会避免使用嵌套查询,尤其是在示例中。我没有将MAXDate嵌套转换为单独查询的唯一原因是我不知道日期的数据类型。
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