从表中检索所有不同的记录,如果两个相似的不同记录之间发生任何更改,则需要同时考虑两者。使用选择查询

Posted

技术标签:

【中文标题】从表中检索所有不同的记录,如果两个相似的不同记录之间发生任何更改,则需要同时考虑两者。使用选择查询【英文标题】:Retrieve all distinct records from table and if any changes happen between two similar distinct record then need to consider both. Using select query 【发布时间】:2013-10-03 17:33:05 【问题描述】:

我想把table1 转换成table2。因为我需要从表中找出除 mis_date 之外的所有不同记录,最重要的条件是两个相似的不同记录之间是否发生任何更改,而不是在这种情况下,我希望它们都作为两个不同的记录。

例子:

我/p

empId Empname Pancard MisDate
123 亚历克斯广告234 2012 年 11 月 31 日
123 亚历克斯广告234 2012 年 12 月 31 日
123 亚历克斯广告234 2013 年 1 月 31 日
123 亚历克斯 dds124 29/02/2013
123 亚历克斯广告234 2013 年 3 月 31 日
123 亚历克斯广告234 2013 年 4 月 31 日
123 亚历克斯 dds124 2013 年 5 月 30 日

预期 o/p

empId Empname Pancard MisDate 123 亚历克斯广告234 2012 年 11 月 31 日 123 亚历克斯 dds124 29/02/2013 123 亚历克斯广告234 2013 年 3 月 31 日 123 亚历克斯 dds124 2013 年 5 月 30 日

【问题讨论】:

【参考方案1】:

假设每个MisDate 只有一行(否则您必须找到另一种指定顺序的方法):

SELECT t1.empId, t1.Empname, t1.Pancard
FROM Table1 t1
LEFT OUTER JOIN Table1 t2 
    ON t2.MisDate = (SELECT MAX(MisDate) FROM Table1 t3 WHERE t3.MisDate < t1.MisDate)
WHERE t2.empId IS NULL 
OR t2.empId <> t1.empId OR t2.Empname <> t1.Empname OR t2.Pancard <> t1.Pancard

SQL Fiddle example

这对先前的记录执行自连接,按MisDate 的顺序,如果它不同或没有先前的记录(它是第一行),则输出。

注意:你有一些时髦的约会。我认为这些只是转录错误,并已在小提琴中更正。

【讨论】:

非常感谢解决这个问题。这真的很可观,因为这个查询将对数据仓库项目有很大帮助。

以上是关于从表中检索所有不同的记录,如果两个相似的不同记录之间发生任何更改,则需要同时考虑两者。使用选择查询的主要内容,如果未能解决你的问题,请参考以下文章

查询更新和删除两个不同表中的记录

从 mysql 表中检索所有行,但首先将它们分组以删除重复

从表中选择不同的记录并执行重复行的列总和(托盘、总和)。并显示重复的行一次[关闭]

从表中检索最后 N 条记录

从表中检索特定 24 小时时间范围内的记录

从表中选择所有行并仅将不同的值插入到 C# 中另一个位置的数据库中