我想获取
的值我有一个名为slot_machine_history的表,它代表给定老虎机的所有移动(出售,新搬迁,破坏,暂停)。
我想在“ V”和“ V”运动标识的每个卖出运动之前获取行。因为我想获得该公司是该广告位的所有者,以及该广告位的新所有者
slot_machine_code movement_history current_company
612134 'NEW' 1
612134 'TRANSPORT' 1
612134 'TRANSPORT' 1
612134 'V' 10
612134 'TRANSPORT' 10
612134 'SUSPENDED' 10
612134 'V' 14
我的SQL查询应该返回:
612134 'TRANSPORT' 1
612134 'V' 10
612134 'SUSPENDED' 10
612134 'V' 14
答案 0 :(得分:2)
您需要一些明智的方法来为此排序行。希望您的桌子上的东西会随着机器进行的每个移动事件而递增,例如日期或计数器:
movement_event slot_machine_code movement_history current_company
1 612134 'NEW' 1
2 612134 'TRANSPORT' 1
3 612134 'TRANSPORT' 1
4 612134 'V' 10
5 612134 'TRANSPORT' 10
6 612134 'SUSPENDED' 10
7 612134 'V' 14
然后您可以执行以下查询:
SELECT slot_machine_code, movement_history, current_company FROM
(
SELECT t.*, LEAD(movement_history) OVER(PARTITION BY slot_machine_code ORDER BY movement_event ASC) as next_Movement_history
FROM your_table t
) z
WHERE
z.movement_history = 'V' OR z.next_movement_history = 'V'
如果没有任何列表示记录的写入顺序,那么您有点不满意。加一。
如果当前表恰好按插入顺序返回行,则足以使用该表添加行号或类似的行,但是很快就可以这样做,因为数据库返回行的顺序永远不能保证是插入顺序,并且内部数据重组将更改无序(没有ORDER BY子句)查询返回的行的顺序