当前位置: 首页 > 知识库问答 >
问题:

清除“重复”数据,同时保留最新条目

梁丘威
2023-03-14

我想显示每个机组成员、基本信息以及他们合同中的最新开始日期。使用我的基本查询,它会为每个合同返回一行,复制具有不同开始和结束日期的基本信息。我只需要每个人一行,带有最新的开始日期(如果他们还没有开始日期,则为null)。

我对分组和分区函数的理解有限。我为类似日期逆向工程的查询使用分区并创建临时表进行选择。最终我可以重用它,但它似乎比我们需要的更复杂。

    select
Case when P01.EMPLOYMENTENDDATE < getdate() then 'Y'
else ''
end as "Deactivate",
concat(p01.FIRSTNAME,' ',p01.MIDDLENAME) as "First and Middle",
      p01.LASTNAME, 
p01.PIN,
(select top 1 TELENO FROM PW001P0T WHERE PIN = P01.PIN and TELETYPE = 6 ORDER BY TELEPRIORITY) as "EmailAddress",
      org.NAME AS Vessel, 
case 
       WHEN c02.CODECATEGORY= '20' then 'MARINE'
       WHEN c02.CODECATEGORY= '10' then 'MARINE'
       ELSE 'HOTEL' end as "Department",
         c02.name as RankName,
               c02.Alternative RankCode, 
convert(varchar, ACT.DATEFROM,101) EmbarkDate,
convert(varchar,(case when ACT.DATEFROM is null then p03.TODATEESTIMATED else ACT.DATEFROM end),101) DebarkDate

FROM   PW001P01 p01 
      JOIN PW001P03 p03 
           ON  p03.PIN = p01.PIN
      LEFT JOIN PW001C02 c02 
           ON  c02.CODE = p03.RANK 
         /*LEFT JOIN PW001C02 CCIRankTbl 
           ON  CCIRankTbl.CODE = p01.RANK*/
      LEFT JOIN PWORG org 
           ON  org.NUMORGID = dbo.ad_scanorgtree(p03.NUMORGID, 3) 
     LEFT JOIN PWORGVESACT ACT
     ON  ACT.numorgid=dbo.ad_scanorgtree(p03.numorgid,3) 

where P01.EMPLOYMENTENDDATE > getdate()-10 or P01.EMPLOYMENTENDDATE is null

我只需要每列显示一行。前5列将始终相同。最后一列取决于合同,我们只需要最新一列的数据。

<table><tbody><tr><th>Deactivate</th><th>First and Middle</th><th>Lastname</th><th>PIN</th><th>Email</th><th>Vessel</th><th>Department</th><th>Rank</th><th>RankCode</th><th>Embark</th><th>Debark</th></tr><tr><td> </td><td>Martin</td><td>Smith</td><td>123</td><td>msmith@fake.com</td><td>Ship1</td><td>Marine</td><td>ViceCaptain</td><td>VICE</td><td>9/1/2008</td><td>9/20/2008</td></tr><tr><td> </td><td>Matin</td><td>Smith</td><td>123</td><td>msmith@fake.com</td><td>Ship2</td><td>Marine</td><td>Captain</td><td>CAP</td><td>12/1/2008</td><td>12/20/2008</td></tr><tr><td> </td><td>Steve Mark</td><td>Dude</td><td>98765</td><td>sdude@fake.com</td><td>Ship1</td><td>Hotel</td><td>Chef</td><td>CHEF</td><td>5/1/2009</td><td>8/1/2009</td></tr><tr><td> </td><td>Steve Mark</td><td>Dude</td><td>98765</td><td>sdude@fake.com</td><td>Ship3</td><td>Hotel</td><td>Chef</td><td>CHEF</td><td>10/1/2010</td><td>12/20/2010</td></tr></tbody></table>

共有1个答案

白成济
2023-03-14

在主查询中将您的查询更改为选择DISTINCT,并为DebarkDate列使用子选择:

您可以根据该子查询的结果在需要的日期进行任何转换。

 类似资料:
  • 本文向大家介绍sqlserver清除完全重复的数据只保留重复数据中的第一条,包括了sqlserver清除完全重复的数据只保留重复数据中的第一条的使用技巧和注意事项,需要的朋友参考一下

  • 本文向大家介绍MySQL查询重复数据(删除重复数据保留id最小的一条为唯一数据),包括了MySQL查询重复数据(删除重复数据保留id最小的一条为唯一数据)的使用技巧和注意事项,需要的朋友参考一下 开发背景: 最近在做一个批量数据导入到MySQL数据库的功能,从批量导入就可以知道,这样的数据在插入数据库之前是不会进行重复判断的,因此只有在全部数据导入进去以后在执行一条语句进行删除,保证数据唯一性。

  • 我正在开发一个应用程序,它显示带有。当我滚动的值被清除时。 下面是我的代码 适配器类别: 数据模型类 不知道我哪里做错了。

  • 我试图编写一个代码,它接收并删除该中的重复字符。 例如。如果,则应返回。到目前为止,我的代码只返回与给定的相同的tekst…

  • 我正在使用图表加载图表。在页面启动时使用硬编码数据的js。接下来,单击一个按钮,我进行一个ajax查询;从数据库获取外部数据,并希望将该数据加载到图表中。 我已检索到正确的数据并将其存储为数组。我想清除当前图表数据,并将此新数组作为图表的新数据输入。 首先,我需要清空旧数据,并尝试、清除()和销毁(),但它们都不起作用。图表只是不断地用旧数据重新加载。旧图表似乎被删除了一瞬间,却又出现了。我该如何

  • 我目前正在开发一个应用程序,但其中有一个错误。每当用户安装应用或清除数据时,应用都应重置。但相反,应用会为用户填充标准数据,而不是显示用户可以自己输入的开始屏幕。 我的问题主要是关于方法。我想输入: 不幸的是,我无法让它工作。有人能指出手头的问题吗?