繁体   English   中英

Where子句发布中的案例声明

[英]case statement in Where clause issue

我有一个查询要写。 我有一个名为FG500的文件,该文件具有一个称为UTXT(证书编号)的字段。 文件的密钥(非唯一)是型号(MODL)。文件可以有多行带有型号。 它还具有创建日期(CRDT),创建时间(CRTM),更改日期(CHDT),更改时间(CHTM)

我需要根据创建日期和时间/更改日期和时间提取最新的欧盟认证编号(UTXT)。 也就是说,如果更改日期/时间不为0,则拉取最新的日期。否则检查创建日期并从中拉取最新记录。

我将不得不使用一个案例,但不确定如何。 非常感谢您的帮助。 样本数据:

Model Number    L12G4AGAEA    L12G4AGAEA
UTXT            (Blank)       E4*2002/24*0458
Create date     07/30/12      03/16/12
Create Time     08:32:22      08:32:22
Change Date     07/31/12      03/17/12
Change Time     08:32:22      08:32:22

预期结果将为空白,因为最高更改日期/时间是第一条记录。 如果更改日期为空,那么我将继续创建日期/时间

也许这会有所帮助。 我从您的第一组表格数据中构建了表格,该查询演示了如何使用ROW_NUMBER()到达每个型号的“最新”行。 由于此示例的DB2查询语法相似,因此我在此示例中使用了MS SQL Server。

这可能不是一个完整的答案,并且由于我没有访问DB2的权限,所以我无法演示如何合并日期和时间列,这确实是应该做的。

SQL小提琴

MS SQL Server 2014架构设置

CREATE TABLE Table1
    ([ModelNumber] varchar(10), [UTXT] varchar(15), [CREATEdate] datetime, [CREATEtime] varchar(8), [CHANGEdate] datetime, [CHANGEtime] varchar(8))
;

INSERT INTO Table1
    ([ModelNumber], [UTXT], [CREATEdate], [CREATEtime], [CHANGEdate], [CHANGEtime])
VALUES
    ('L12G4AGAEA', NULL, '2012-07-30 00:00:00', '08:32:22', '2012-07-31 00:00:00', '08:32:22'),
    ('L12G4AGAEA', 'E4*2002/24*0458', '2012-03-16 00:00:00', '08:32:22', '2012-03-17 00:00:00', '08:32:22'),
    ('L12G4AGAEA', 'E4*2002/24*0458', '2012-07-11 00:00:00', '08:32:22', '2012-07-12 00:00:00', '08:32:22'),
    ('L12G4AGAEA', NULL, '2012-07-25 00:00:00', '08:32:22', '2012-07-26 00:00:00', '08:32:22'),
    ('L12G4AGAEA', 'E4*2002/24*0458', '2012-07-11 00:00:00', '08:32:22', '2012-07-12 00:00:00', '08:32:22'),
    ('L12G4AGAEA', 'E4*2002/24*0458', '2012-05-22 00:00:00', '08:32:22', '2012-05-23 00:00:00', '08:32:22'),
    ('L12G4AGAEA', 'E4*2002/24*0458', '2012-08-03 00:00:00', '08:32:22', '2012-08-03 00:00:00', '08:32:22'),
    ('L12G4AGAEA', 'E4*2002/24*0458', '2012-05-22 00:00:00', '08:32:22', '2012-05-23 00:00:00', '08:32:22'),
    ('L12G4AGAEA', 'E4*2002/24*0458', '2012-05-15 00:00:00', '08:32:22', '2012-05-16 00:00:00', '08:32:22'),
    ('L12G4AGAEA', 'E4*2002/24*0458', '2012-07-20 00:00:00', '08:32:22', '2012-07-21 00:00:00', '08:32:22'),
    ('L12G4AGAEA', 'E4*2002/24*0458', '2012-05-11 00:00:00', '08:32:22', '2012-05-14 00:00:00', '08:32:22')
;

查询1

select
    *
from (
      select
          *
          , row_number() over(partition by ModelNumber 
                             order by coalesce(CHANGEdate,CREATEdate) DESC) rn
      from table1
      ) d
where rn = 1

结果

| ModelNumber |            UTXT |           CREATEdate | CREATEtime |           CHANGEdate | CHANGEtime | rn |
|-------------|-----------------|----------------------|------------|----------------------|------------|----|
|  L12G4AGAEA | E4*2002/24*0458 | 2012-08-03T00:00:00Z |   08:32:22 | 2012-08-03T00:00:00Z |   08:32:22 |  1 |

暂无
暂无

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

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