sql - 比较同一张表的不同订单

标签 sql postgresql

我有以下场景,一个包含这些列的表:

table_id|user_id|os_number|inclusion_date

在系统中,os_number 对于用户来说是连续的,但是由于系统错误,一些用户以错误的顺序插入操作系统。像这样:

table_id | user_id | os_number | inclusion_date
-----------------------------------------------
1        | 1       | 1         | 2015-11-01
2        | 1       | 2         | 2015-11-02
3        | 1       | 3         | 2015-11-01
  • 注意在操作系统编号 2 之前插入的操作系统编号 3

我需要什么:

恢复乱序的第2行和第3行的table_id

我有这两个选择以两种不同的顺序向我显示 table_id:

select table_id from table order by user_id, os_number

select table_id from table order by user_id, inclusion_date

我不知道如何比较这两个选择并查看哪些用户受到此系统错误的影响。

最佳答案

您的问题有点困难,因为没有正确的顺序(如所示)——因为日期可能有联系。因此,使用 rank()dense_rank() 函数比较两个值并返回顺序不正确的值:

select t.*
from (select t.*,
             rank() over (partition by user_id order by inclusion_date) as seqnum_d,
             rank() over (partition by user_id order by os_number) as seqnum_o
      from t
     ) t
where seqnum_d <> seqnum_o;

关于sql - 比较同一张表的不同订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33998238/

相关文章:

javascript - 如何在javascript中获取sqlite数据库值

sql - 多个 UPDATE、同一列、不同值、不同 WHERE 条件

postgresql - 在 PostgreSQL 中根据单独的表数据执行搜索

postgresql - Amazon EC2 postgresql 备份 : Snapshot the data directory or pg_dump onto an EBS volume that is snapshotted consistently?

mysql - Deis 工作流支持非 12 因素服务

php - 带有消息 'could not find driver' Laravel 和 Postgresql 错误的 PDOException

php - 仅获取表中重复项的最小值

sql - 如何将 varchar 连接到整数

sql - 如何用查询结果声明变量?

sql - 未经许可使用表的PostgreSQL查询