从表中检索所有不同的记录,如果两个相似的不同记录之间发生任何更改,则需要同时考虑两者。使用选择查询
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
的顺序,如果它不同或没有先前的记录(它是第一行),则输出。
注意:你有一些时髦的约会。我认为这些只是转录错误,并已在小提琴中更正。
【讨论】:
非常感谢解决这个问题。这真的很可观,因为这个查询将对数据仓库项目有很大帮助。以上是关于从表中检索所有不同的记录,如果两个相似的不同记录之间发生任何更改,则需要同时考虑两者。使用选择查询的主要内容,如果未能解决你的问题,请参考以下文章