我有一张表格如下:
MyJob| MyKey |MyCode|MyDate| MyTime
----------------------------------
q183b| 0131081a | 24 |100315| 9:37
q183b| 0131081a | 9 |100315| 11:38
q183b| 0132426a | 1 |90314 | 15:36
q183b| 0132426a | 2 |100315| 9:36
q183b| 0132426a | 85 |100315| 11:36
请注意,MyDate格式为YYMMDD,MyTime为24小时格式。
我想用最新的MyDate和MyTime返回唯一MyKey的结果。预期的结果将是:
MyJob | MyKey |MyCode| MyDate | MyTime
q183b | 0131081a | 9 | 100315 | 11:38
q183b | 0132426a | 85 | 100315 | 11:36
任何帮助将不胜感激。感谢。
答案 0 :(得分:6)
首先将日期+时间列合并到日期时间中,以便轻松订购它们。自从我使用Sql Server以来已经有一段时间了,但是row_number()函数和分区是一种简单的方法,可以找到一个列的另一个列的最大值 - partition子句类似于group by。
select t.*
from
(
select t.MyKey, t.MyDateTime
, row_number() over
(partition by t.mykey order by t.MyDateTime desc) as keyOrderNbr
from table t
) A
inner join table t
on A.MyKey = t.MyKey
and A.MyDateTime = t.MyDateTime
where A.keyOrderNbr = 1
答案 1 :(得分:2)
首先,您需要将日期字符转换为日期字段,以便您可以按日期排序。然后你可以做的是:
SELECT DISTINCT *
FROM MyTable
WHERE MyTable.MyDate =
(
SELECT MAX(Sub_MyTable.MyDate)
FROM MyTable
WHERE MyTable.MyKey = Sub_MyTable.MyKey
);
现在请记住,除非您将字段转换为日期字段,否则MAX(MyDate)和其他对MyDate的引用将无法满足您的要求。我建议创建自己的函数将char字段转换为日期字段。
如果您尝试按原样按MyDate字段排序,您将按字母顺序排序结果,因为它是一个字符串。
如果时间部分在结果中很重要,那么您可以按照@jeff。
的建议将两者结合起来