Where语句中的case语句
我有相当的Query要写。 我有一个名为FG500的文件,它有一个名为UTXT(认证编号)的字段。该文件的关键字(不唯一)是型号(MODL)。该文件可以有多个行和型号。它还创建日期(CRDT),创建时间(CRTM),更改日期(CHDT),更改时间(CHTM)Where语句中的case语句
我需要根据创建日期&时间/变更日期拉动欧盟最新认证编号(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()
来获得每个型号的“最新”行。我从这个例子中使用了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
| 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 |
当呈现“样本数据”时,使用逐行布局(如您最初所做的那样),并从左边缩进每行4个空格。它会被视为一个表格(例如上面的表格)。 –
非常感谢!这是我使用的最终查询:Select COALESCE((选择UTXT FROM FG500F,其中MODL = 'L12G4AGAEA'和UTxT ''ORDER BY CHGDTE desc,CHGTIM desc, CRTDTE desc,CRTTIM desc只提取第一行),' ')从 sysibm/SYSDUMMY1 –
添加一些示例表格数据和预期结果 - 作为格式化文本,而不是图像。 – jarlh
我们假设这是用于'db2'吗? ('sql'的不同之处在于dbms。)'rpgle'与这个问题有什么关系? –
是的,这是用于DB2 .. –