【问题标题】:HOW TO: SQL Server select distinct field based on max value in other field如何:SQL Server 根据其他字段中的最大值选择不同的字段
【发布时间】:2012-09-16 06:00:18
【问题描述】:
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  |

我想要结果:

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  |

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

我尝试了几个选项,但总是失败

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 兼容。

【问题讨论】:

  • 您上面的查询有什么问题?看起来它应该做得很好......
  • 我想我一执行就得到:link
  • @user1695182 你在正确的数据库中吗?表是否在您需要识别的架构中?
  • 该错误似乎与查询结构无关,而是与未找到表名“templateFeedback”有关。你能仔细检查一下你可以运行SELECT * FROM templateFeedback LIMIT 1吗?
  • 架构中的表是我正在使用的表的缩短版本。这是完整的架构:link

标签: sql sql-server distinct max


【解决方案1】:

自从我发现窗口函数后,我就不再用这种方式做事了。很多时候,有两条记录具有相同的时间戳,我在结果集中得到两条记录。这是 tSQL 的代码。甲骨文类似。我认为 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

【讨论】:

    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多