我有一个订单表。在该表中,除其他行,我有一个ID(PK),客户ID,航运国家,订单日期在SQL中选择当前列值与先前值不匹配的行
ID | CustomerId | ShippingCountry | OrderDate
1 | 111111 | DE | 2016-08-13
2 | 222222 | GB | 2016-08-17
3 | 111111 | ES | 2016-09-05
4 | 333333 | ES | 2016-10-25
5 | 444444 | US | 2016-10-26
6 | 555555 | FR | 2016-10-29
7 | 666666 | DE | 2016-11-04
8 | 111111 | DE | 2016-11-12
9 | 222222 | US | 2016-12-01
10 | 444444 | GB | 2016-12-01
11 | 555555 | FR | 2016-12-05
12 | 333333 | ES | 2016-12-15
我需要选择行,其中客户以前的订单不符合他们的最新订单的航运国家。我也想在结果中看到两种不同的运费代码。
使用上面的例子,我想看到:
CustomerId | ShippingCountryLatest | ShippingCountryPrevious
111111 | DE | ES
222222 | US | GB
444444 | GB | US
的ID和订购日期可以用来确定事物的顺序。 ID是一个递增的数字,订单日期如其所述。
我需要运行这个表的表有大约500k行。
有什么建议吗?
这里有一个SQLFiddle让你开始:http://sqlfiddle.com/#!6/5d046/1/0
的SQL服务器的版本? –
2012年以后的领先/滞后。 row_number()与cte否则将是一个好的开始。 – scsimon
Cust 111111去DE> ES,然后ES> GB。为什么111111是DE> GB? –