2017-07-03 87 views
1

我想要具有最大id的行。我需要有id 2和那里的行。如何在连接两个表时获得表2的最大ID列

我的表格
请使用下面的脚本创建表格。

/****** Object: Table [dbo].[Customers] Script Date: 03/07/2017 14:48:14 ******/ 
    SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 
    CREATE TABLE [dbo].[Customers](
     [CustomerID] [bigint] IDENTITY(1,1) NOT NULL, 
     [Name] [nchar](10) NULL, 
    CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED 
    (
     [CustomerID] ASC 
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
    ) ON [PRIMARY] 

    GO 
    /****** Object: Table [dbo].[Instalments] Script Date: 03/07/2017 14:48:14 ******/ 
    SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 
    CREATE TABLE [dbo].[Instalments](
     [id] [int] IDENTITY(1,1) NOT NULL, 
     [Amount] [int] NULL, 
     [Date] [date] NULL, 
     [CustomerID] [bigint] NULL, 
    CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED 
    (
     [id] ASC 
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
    ) ON [PRIMARY] 

    GO 
    SET IDENTITY_INSERT [dbo].[Customers] ON 

    INSERT [dbo].[Customers] ([CustomerID], [Name]) VALUES (1, N'Muddassir ') 
    INSERT [dbo].[Customers] ([CustomerID], [Name]) VALUES (2, N'Irshad ') 
    SET IDENTITY_INSERT [dbo].[Customers] OFF 
    SET IDENTITY_INSERT [dbo].[Instalments] ON 

    INSERT [dbo].[Instalments] ([id], [Amount], [Date], [CustomerID]) VALUES (1, 500, CAST(N'2014-09-30' AS Date), 1) 
    INSERT [dbo].[Instalments] ([id], [Amount], [Date], [CustomerID]) VALUES (2, 600, CAST(N'2015-09-30' AS Date), 1) 
    INSERT [dbo].[Instalments] ([id], [Amount], [Date], [CustomerID]) VALUES (3, 800, CAST(N'2014-09-30' AS Date), 2) 
    SET IDENTITY_INSERT [dbo].[Instalments] OFF 

我查询

这是我的查询,我使用。

SELECT a.CustomerID,a.[Name],b.Amount,b.Date,b.id from Customers as a 

left join Instalments as b On b.CustomerID=a.CustomerID 

我的结果 这是我的查询的结果。

​​

我想要什么结果呢? 但我想要下面的结果。我想所有这些都最大ID的行只

CustomerID Name  Amount Date  id 
1   Muddassir 600  2015-09-30 2 
2   Irshad  800  2014-09-30 3 

回答

2

尝试这个

SELECT CustomerID 
    ,[Name] 
    ,Amount 
    ,[Date] 
    ,id 
FROM (
    SELECT a.CustomerID 
     ,a.[Name] 
     ,b.Amount 
     ,b.DATE 
     ,b.id 
     ,Row_NUmber() OVER (
      PARTITION BY a.CustomerID ORDER BY b.DATE DESC 
      ) AS Rno 
    FROM Customers AS a 
    LEFT JOIN Instalments AS b ON b.CustomerID = a.CustomerID 
    ) DT 
WHERE DT.Rno = 1 

结果

CustomerID Name Amount Date id 
1 Muddassir 600 2015-09-30 2 
2 Irshad  800 2014-09-30 3 
+0

对我有用的答案。但我想通过id订购而不是按日期。 很好的回答! –

+0

查询根据客户标识根据最新测试日期和分区获取记录,您可以使用CustomerID而不是[日期]列 – 2017-07-03 10:22:32

1

你可以使用MAX()以获得最高的ID在一个子查询,并将其与比较当前ID为Instalments。 试试这个:

SELECT a.CustomerID,a.[Name],b.Amount,b.Date,b.id FROM Customers AS a 
LEFT JOIN Instalments AS b ON b.CustomerID=a.CustomerID 
WHERE b.id = (SELECT MAX(id) FROM Instalments AS i WHERE i.CustomerID = a.CustomerID); 
+0

这正是我想要的。 –

+0

很高兴能帮到您 –

+0

是的!你可以保持它。 –

1

你确定你并不总是需要最新分期付款为每个客户?

这将是:

SELECT a.CustomerID 
      ,a.Name 
      ,b.Amount 
      ,b.Date 
      ,b.id 
     FROM Customers AS a 
LEFT JOIN Instalments AS b 
     ON b.CustomerID=a.CustomerID 
     AND b.Date = (SELECT MAX(Date) 
         FROM Instalments T 
         WHERE T.CustomerID = b.CustomerID 
        ) 
+1

是的。但不使用最大值(日期)通过使用最大ID。 您的回答对我有用。 –

相关问题