【发布时间】:2017-01-02 12:45:40
【问题描述】:
我有以下格式的表格(按位置和月份/日期划分的产品成本),并希望在成本发生变化时获取 ChangeDate 的最小值。
Cost Loc Prod ChangeDate
--------------------------------------------------------
1.223000000000 5678 12345678 2010-01-03 00:00:00
1.223000000000 5678 12345678 2010-01-31 00:00:00
1.223000000000 5678 12345678 2010-02-28 00:00:00
1.000000000000 5678 12345678 2010-04-04 00:00:00
1.223000000000 5678 12345678 2010-05-02 00:00:00
1.223000000000 5678 12345678 2010-05-30 00:00:00
1.223000000000 5678 12345678 2010-07-04 00:00:00
1.277200000000 5678 12345678 2010-08-01 00:00:00
1.277200000000 5678 12345678 2010-08-29 00:00:00
1.277200000000 5678 12345678 2010-10-03 00:00:00
预期输出是:
Cost Loc Prod CostChangeStartDate
------------------------------------------------
1.223000000000 5678 12345678 2010-01-03 00:00:00
1.000000000000 5678 12345678 2010-04-04 00:00:00
1.223000000000 5678 12345678 2010-05-02 00:00:00
1.277200000000 5678 12345678 2010-08-01 00:00:00
我尝试使用 Row_Number() Over(PartitionBy OrderBy) 但问题是 由于 Cost 1.223000000000 重复了两次,我无法正确分区,所以只能得到 3 条记录。
【问题讨论】:
-
select cost, loc, prod, min(changeDate) from your_table group by cost, loc, prod -
@juergend 只会获得 first 时间成本达到每个值。例如。在上面的数据中,它两次达到 1.223。
-
@MANDROID,您真的希望两行的
1.223值都为2010-01-03吗? -
对于 2012 之前的 sql server 版本,您可以使用不同的行号(例如
row_number() over (order by x) - row_number() over (partition by cost order by x))
标签: sql sql-server row-number