繁体   English   中英

用于比较列值的 SQL 查询

[英]SQL query to compare column values

我有以下数据模式,需要编写 SQL 来验证测试场景,如下所示。 这只是一个示例,我的表有数百万条记录,需要 sql 进行验证。 任何帮助/建议将不胜感激。

  1. RANK_ORDER 2 的 EFEC_FROM = RANK_ORDER 的 EFEC_2=1
  2. RANK_ORDER 的 EFEC_FROM 3= RANK_ORDER 的 EFEC_2=2
  3. RANK_ORDER 的 EFEC_FROM 4= RANK_ORDER 的 EFEC_2=3

和数据:

S_KEY FLAG_1  FLAG_2    EFEC_FROM                   EFEC_2                     RANK_ORDER   
100   1       0         2019-02-28 15:04:00.000000  2019-02-28 15:13:00.006000  1
100   0       0         2019-02-28 15:13:00.006000  2019-02-28 15:19:00.011000  2
100   0       0         2019-02-28 15:19:00.011000  2019-02-28 15:20:00.014000  3
100   0       1         2019-02-28 15:20:00.014000  2099-12-31 00:00:00.000000  4

要找出哪些行未通过验证规则,您可以使用LAG()LEAD()函数,如下所示:

with 
x as (
  select
    s_key, flag_1, flag_2, efec_from, efec_2, rank_order,
    lag(efec_2 order by rank_order) prev_efec_2
from my_table
)
select *
from x
where efec_from <> prev_efec_2

您肯定需要使用 LAG/LEAD 函数从数据集中的上一行或下一行获取信息。

SELECT * FROM (
SELECT s_key,
       flag_1,
       flag_2,
       efec_from,
       efec_2,
       rank_order
       NVL (   LEAD (efec_from, 1)
               OVER (PARTITION BY s_key 
                         ORDER BY rank_order),
               '2099-12-31') AS next_efec_2
  FROM table)
WHERE efec_2 <> next_efec_from

LAG/LEAD 信息的其他来源: https : //docs.teradata.com/reader/756LNiPSFdY~4JcCCcR5Cw/NbZIb7BVEkYT9tMbXxOuog

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM