2012-09-24 27 views
2
id tmpname  date_used  tkt_nr 
---|---------|------------------|--------| 
1 | template| 04/03/2009 16:10 | 00011 | 
2 | templat1| 04/03/2009 16:11 | 00011 | 
5 | templat2| 04/03/2009 16:12 | 00011 | 
3 | diffname| 03/03/2009 15:11 | 00022 | 
4 | diffname| 03/03/2009 16:12 | 00022 | 
6 | another | 03/03/2009 16:13 | NULL | 
7 | somethin| 24/12/2008 11:12 | 00023 | 
8 | name | 01/01/2009 12:12 | 00026 | 

我想有结果:HOW TO:SQL Server的基础上在其他领域最大值选择不同的领域

id tmpname  date_used  tkt_nr 
---|---------|------------------|--------| 
5 | templat2| 04/03/2009 16:12 | 00011 | 
4 | diffname| 03/03/2009 16:12 | 00022 | 
7 | somethin| 24/12/2008 11:12 | 00023 | 
8 | name | 01/01/2009 12:12 | 00026 | 

所以,我正在寻找的是有不同的tkt_nr值排除NULL,基于datetime的最大值。

我尝试了好几种方案,但始终未能

SELECT * 
FROM templateFeedback a 
JOIN (
     SELECT ticket_number, MAX(date_used) date_used 
     FROM templateFeedback 
     GROUP BY ticket_number 
    ) b 
ON a.ticket_number = b.ticket_number AND a.date_used = b.date_used 

我希望得到任何帮助。不幸的是我需要代码与SQL Server兼容。

+2

什么不适用于上面的查询?这似乎应该做得很好... – PinnyM

+1

我认为,只要我执行它,我得到: [链接](http://postimage.org/image/frotjpabb/) – toHo

+0

@ user1695182你在正确的D B?该表格是否需要识别? – Taryn

回答

3

因为我发现了窗口函数,所以我停止了这种方式。通常,有两个记录具有相同的时间戳,并且我在结果集中获得两条记录。这里是tSQL的代码。类似于Oracle。我不认为mySQL支持这一点呢。

Select id, tmpname, date_used, tkt_nbr 
From 
(
    Select id, tmpname, date_used, tkt_nbr, 
     rownum = Row_Number() Over (Partition by tkt_nbr Order by date_used desc) 
) x 
Where row_num=1