最亲爱的专业人士,
我有一个表,有时会创建带有重复发票#(EMP_ID)的行。在这些行中,有单独的日期(FILE_DATE)和时间(FILE_TIME)列(那里有天才数据库设计)。我需要删除此数据库中任何重复的EMP_ID的旧行,保留最近的日期(从FILE_DATE)+时间(从FILE_TIME)。
FILE_DATE和FILE_TIME都是数据库中的日期/时间字段。我们使用的软件写入此表,将发票的日期添加到FILE_DATE列,YYYY-MM-DD 00:00:00.000(所有硬编码的零)。然后FILE_TIME字段具有1900-01-01 HH:mm:ss.SSS,1900-01-01硬编码。 (时间戳来自行写入数据库的时间)
所以,长话短说,我需要将这两个结合在一起,以获得FILE_DATE的DATE部分和FILE_TIME的时间部分,以获得最新的(IF重复存在EMP_ID)并删除所有不重复的EMP_ID最近结婚的FILE_DATE& FILE_TIME。
这是一个前和后的样本。情况会是这样的。
BEFORE :
AFTER :
任何和所有帮助都将受到极大的赞赏。
答案 0 :(得分:2)
使用一些好的旧CTE"魔法":
WITH CTE AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY EMP_ID
ORDER BY FILE_DATE DESC, FILE_TIME DESC) AS RN
FROM YourTable)
DELETE FROM CTE
WHERE RN > 1;
答案 1 :(得分:0)
我认为这可以使用MAX和GROUP BY完成:
select B.EMP_ID
, B.File_date
, Max(B.File_Time) as MaxFileTime
, B.DESC_TEXT_1
from Before B
group
by B.EMP_ID
, B.File_date
, B.DESC_TEXT_1