Sql server 左连接并获取最大日期时间值

Sql server 左连接并获取最大日期时间值,sql-server,datetime,left-join,Sql Server,Datetime,Left Join,我有两张桌子 表1 Id Name =========== 1 Name1 2 Name2 3 Name3 Id Tb1Id DateTime ======================= 1 1 20-09-2017 2 1 01-09-2018

我有两张桌子

表1

        Id     Name
        ===========
        1      Name1
        2      Name2
        3      Name3
        Id     Tb1Id   DateTime
        =======================
        1       1      20-09-2017
        2       1      01-09-2018
        3       2      01-09-2016
        4       2      02-09-2015 
        5       3      06-09-2016 
        6       3      10-09-2019
表2

        Id     Name
        ===========
        1      Name1
        2      Name2
        3      Name3
        Id     Tb1Id   DateTime
        =======================
        1       1      20-09-2017
        2       1      01-09-2018
        3       2      01-09-2016
        4       2      02-09-2015 
        5       3      06-09-2016 
        6       3      10-09-2019
我想通过
Table1.Id=Table2.Tb1Id
连接这两个表,并从表2中获取最大日期时间值。结果应该是这样的

        Id     Name     DateTime
        ========================
        1      Name1    01-09-2018
        2      Name2    01-09-2016
        3      Name3    10-09-2019
试试这个

DECLARE @Table1 AS TABLE(Id INT,Name VARCHAR(20))
INSERT INTO @Table1
SELECT 1,'Name1' UNION ALL
SELECT 2,'Name2' UNION ALL
SELECT 3,'Name3' 

DECLARE @Table2 AS TABLE(Id INT, Tb1Id INT,[DateTime] DATETIME)
INSERT INTO @Table2       
SELECT 1,1,'2017-09-20' UNION ALL
SELECT 2,1,'2018-09-01' UNION ALL
SELECT 3,2,'2016-09-01' UNION ALL
SELECT 4,2,'2015-09-02' UNION ALL 
SELECT 5,3,'2016-09-06' UNION ALL 
SELECT 6,3,'2019-09-10' 

SELECT     t2.Tb1Id AS Id,
           t1.Name,
           MAX(t2.[DateTime]) AS [DateTime]
FROM @Table1 AS T1
INNER JOIN @Table2 AS t2
 ON T1.Id = t2.Tb1Id
GROUP BY 
     t2.Tb1Id,
     t1.Name
结果

Id  Name        DateTime
-----------------------------------
1   Name1   2018-09-01 00:00:00.000
2   Name2   2016-09-01 00:00:00.000
3   Name3   2019-09-10 00:00:00.000

这看起来像一个简单的连接和分组依据。你试过了吗?你遇到问题了吗?唯一奇怪的是日期的外观-日期类型是二进制值,它们没有格式,SSMS显示的日期格式为
YYYY-MM-DD
,以避免本地化字符串产生的混淆。您是否将日期存储为字符串?在这种情况下,您无法计算
MAX
,因为您使用的本地化格式只能按字母顺序排序。真正的解决方案是使用日期类型而不是字符串。其他任何东西都会掩盖错误,并可能导致不正确的结果-是
01-09
9月1日还是1月9日?哪个更晚,
01-09-0218
09-01-2018