带有MAX DATE和Join语句的SQL请求

带有MAX DATE和Join语句的SQL请求,sql,Sql,我需要你的帮助 我有三张桌子 表1 ID, Price, Date, Address ------------------------- 1, 1.2, 02.01.2021, str. Abc 1, 1.3, 03.01.2021 ,str. Abc 2, 1.2, 01.01.2021, str. BFS 2, 1.1, 02.03.2021 ,str. Abb 3, 1.2, 02.03.2021, str. ABC 4, 1.3, 02.03.2021 ,str. aaa 5, 1.2,

我需要你的帮助

我有三张桌子

表1

ID, Price, Date, Address
-------------------------
1, 1.2, 02.01.2021, str. Abc
1, 1.3, 03.01.2021 ,str. Abc
2, 1.2, 01.01.2021, str. BFS
2, 1.1, 02.03.2021 ,str. Abb
3, 1.2, 02.03.2021, str. ABC
4, 1.3, 02.03.2021 ,str. aaa
5, 1.2, 05.02.2021 ,str. Abc
5, 2.3, 08.03.2021, str. Abc
表2

ID, Code, Name
------------
1, 0, name1
2, 123, name2
3, 122, name3
and so on (doesn't matter these columns - they are unique)
表3

AddName, Address
----------
AddName1, str. Abc
AddName2, str. BFS
AddName3, str. ABC
AddName4, str. Abb
等等。它是街道上物体的名称。也是独一无二的

我需要一张像这样的桌子

Name, Price, AddName, Date 
where Code = '{here is my variable}'
按存档ID的最大可能日期筛选。因此应该有

-------------------------------------
name1,1.2, AddName1, 02.01.2021
name2, 1.1, AddName4, 02.03.2021
这里我们有两行并选择了日期02.03.2021,因为它>其他值

等等

我试过了

select Name, Price, max_date, a
from [Table 1] a
inner join [Table 2] b on a.ID = b.ID
inner join
    (select ID, Address max(convert(datetime, Date, 103)) max_date
     from [Table 1]
     group by ID) c on b.ID = c.ID 
                    and convert(datetime, b.Date, 103) = c.max_date
inner join
    [Table 3] on b.Address = [Table 3].Address
where
    a.Code = '123'
order by 
    max_date desc

但这不起作用。我可以很容易地制作出我需要的表格,但我不知道如何按日期筛选它。这里有一个典型的方法,假设您有可用的分析函数:

with lastT1 as (
    select *, row_number() over (partition by id order by date desc) as rn
    from Table1
)
select * from Table2 t2 inner join lastT1 t1 on t1.id = t2.id and t1.rn = 1;

?日期参数是什么意思?这是如果我需要手动选择日期。那不合适。我需要最新的date@walfer您有关于拥有一个变量,然后按日期筛选的注释,好像您希望获得“最新的截止日期”。我想我看错了。请删除那行。谢谢你的回复。这很好,但现在的问题是我不能加入第三个表格。@walfer您可以加入任意多的其他表格。你为什么不试一试呢?不管用。加入了3张桌子,一切正常。但是我的t1.rn值没有1。它们是像“12333”、“431232”这样的符号。它很像行号。