SQL:根据特定条件将行与前一行进行比较

标签 sql oracle compare multiple-records

我想通过与先前的条目(针对该帐户)进行比较来从表中检索记录。 请查看下面的表格和数据。

在这个输出中我想要的是,

ID_NUM  DELIVERY_TYPE
100     2                
101     2
102     2

说明:我需要, 100,因为这是第一次出现 DELIVERY_TYPE IS 2(旧记录有 1) 101,因为这是第一次出现 DELIVERY_TYPE IS 2(旧记录有 3) 102,因为此 ID_NUM 只有一个条目,且 DELIVERY_TYPE IS 2

我不需要 103 因为最近的 DELIVERY_TYPE IS 1 即使它有 DELIVERY_TYPE IS 2 104 因为它有两个或多个 DELIVERY_TYPE IS 2 记录

有人知道如何实现这个结果吗?

CREATE TABLE DEMO
  (
    ID_NUM         NUMBER(10,0),
    DELIVERY_TYPE  NUMBER(2,0),
    NAME           VARCHAR2(100),
    CREATED_DATE   DATE
  );


INSERT INTO DEMO
  (ID_NUM, DELIVERY_TYPE, CREATED_DATE)
VALUES
  (100, 2, TO_DATE('10-FEB-12 11:08:49 AM', 'DD-MON-RR HH:MI:SS AM'));
INSERT INTO DEMO
  (ID_NUM, DELIVERY_TYPE, CREATED_DATE)
VALUES
  (100, 1, TO_DATE('29-JAN-12 11:09:00 AM', 'DD-MON-RR HH:MI:SS AM'));

INSERT INTO DEMO
  (ID_NUM, DELIVERY_TYPE, CREATED_DATE)
VALUES
  (101, 2, TO_DATE('09-FEB-12 11:09:26 AM', 'DD-MON-RR HH:MI:SS AM'));
INSERT INTO DEMO
  (ID_NUM, DELIVERY_TYPE, CREATED_DATE)
VALUES
  (101, 3, TO_DATE('14-JAN-12 11:09:33 AM', 'DD-MON-RR HH:MI:SS AM'));

INSERT INTO DEMO
  (ID_NUM, DELIVERY_TYPE, CREATED_DATE)
VALUES
  (102, 2, TO_DATE('02-FEB-12 10:09:26 AM', 'DD-MON-RR HH:MI:SS AM'));

INSERT INTO DEMO
  (ID_NUM, DELIVERY_TYPE, CREATED_DATE)
VALUES
  (103, 1, TO_DATE('01-FEB-12 10:09:26 AM', 'DD-MON-RR HH:MI:SS AM'));
INSERT INTO DEMO
  (ID_NUM, DELIVERY_TYPE, CREATED_DATE)
VALUES
  (103, 2, TO_DATE('02-JAN-12 11:09:33 AM', 'DD-MON-RR HH:MI:SS AM'));

INSERT INTO DEMO
  (ID_NUM, DELIVERY_TYPE, CREATED_DATE)
VALUES
  (104, 2, TO_DATE('02-FEB-12 10:09:26 AM', 'DD-MON-RR HH:MI:SS AM'));
INSERT INTO DEMO
  (ID_NUM, DELIVERY_TYPE, CREATED_DATE)
VALUES
  (104, 2, TO_DATE('02-FEB-12 10:09:26 AM', 'DD-MON-RR HH:MI:SS AM'));

最佳答案

使用 LAG 函数。

如果您为示例发布一个小的值表而不是(/除了)插入语句,可能会更容易。

关于SQL:根据特定条件将行与前一行进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9285597/

相关文章:

mysql - 将左连接与 min 一起使用

具有 OR 的 SQL 查询比 2 个单独的查询慢得多

java - Hibernate Criteria/Oracle - Join - 仅当所有关联数据匹配条件时才返回

git - 使用 git 在 Visual Studio 2015 中提交之间的差异

python - Python比较列表

arrays - 比较数组时删除匹配项

sql - Oracle SQL 错误 : ORA-00923: From Keyword not found where expected

mysql 根据许多列值选择行

mysql - 高级sql查询

java - Oracle Thin Driver 和 RAC DB 的透明故障转移