sql - 如何在连接两个表时找到列的最大值而不使用 rownumber 函数?

标签 sql mysql sql-server

有如下两个表。这里的要求是获取表1中每个字母的ID和日期。如果一个字母有多个条目,则获取日期最新的条目。

我尝试连接表并使用行号和分区方法来获得预期的结果,这可行,但是有没有更好的方法来处理它?<​​/p>

表1

S.no |  Alphabet
-----|-----
1    |   A
2    |   B
3    |   C

表2

Alphabet |    ID   |    DATE 
---------|---------|----------    
A        | A1      | 21/12/2016
A        | A2      | 22/12/2016
C        | C1      | 25/12/2016
C        | C2      | 27/12/2016
C        | C3      | 24/12/2016
B        | B1      | 23/12/2016

预期结果

S.no    | Alphabet   | ID    | Time
--------|------------|-------|-------
1       | A          | A2    | 22/12/2016
2       | B          | B1    | 23/12/2016
3       | C          | C2    | 27/12/2016 

最佳答案

你可以通过一系列的连接来完成你想要的事情。将两个表连接在一起,然后使用第二个连接到子查询,该子查询查找每个字母表的最新记录。

SELECT t1.`s.no`,
       t1.Alphabet,
       t2.ID,
       t2.Time
FROM table1 t1
INNER JOIN table2 t2
    ON t1.Alphabet = t2.Alphabet
INNER JOIN
(
    SELECT Alphabet, MAX(TIME) AS max_time
    FROM table2
    GROUP BY Alphabet
) t3
    ON t2.Alphabet = t3.Alphabet AND
       t2.TIME = t3.max_time

关于sql - 如何在连接两个表时找到列的最大值而不使用 rownumber 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41609557/

相关文章:

php - 根据另一个字段计算一个字段的出现次数

javascript - 使用 PHP 将 Javascript 时间转换为 MySQL 格式

c# - 如何对包含搜索拼写错误的单词的 CustomObjects 列表执行文本搜索?

sql - SELECT DISTINCT 或 SELECT IN 子句的效率

php - zend 框架 where 查询中的语句

sql - 在 Postgres 中使用表值参数调用函数

c# - 使用 Entity Framework 从数据库获取前 N 行

sql-server - 从 Azure VM 上的 IIS Web 应用连接到 Azure SQL DB

java - Derby 中的存储过程

java - Hibernate hibernate.show_sql 在使用工作上传读取时未映射