我有很多查询要写。 我有一个名为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
预期结果为空白,因为最高更改日期/时间是第一条记录。如果更改日期为空白,那么我将继续创建日期/时间
答案 0 :(得分:1)
也许这会有所帮助。我从第一组表格数据中构建了表格,查询演示了使用ROW_NUMBER()
来获得每个模型编号的“最新”行。我使用了此示例中的MS SQL Server,因为DB2的查询语法类似。
这可能不是一个完整的答案,因为我无法访问DB2,所以我无法演示如何组合真正应该完成的日期和时间列。
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
<强> Results 强>:
| 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 |