2017-07-03 3 views
1

Ich möchte die Zeile, die maximale ID haben. Ich brauche die Zeilen, die ID 2 und dort haben.So erhalten Sie Max ID-Spalte der Tabelle zwei, wenn Sie zwei Tabelle verbinden

Meine Tabellen
Bitte erstellen Sie Tabellen unter Verwendung von unten Skript.

/****** 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 

Meine Anfrage

Dies ist meine Abfrage, die ich verwende.

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 

Mein Ergebnis dies ist das Ergebnis meiner Anfrage.

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

Wie weit ich will? aber ich möchte unten Ergebnis. Ich möchte alle Zeilen, die nur max id haben

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

Antwort

2

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

Nützliche Antwort für mich. Aber ich möchte nach ID und nicht nach Datum sortieren. Große Antwort !! –

+0

Abfrage holen die Datensätze basierend auf spätestem Datum und Partition von CustomerID, können Sie CustomerID anstelle von [Datum] Spalte –

1

Diese

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 

Ergebnis Versuchen Sie MAX() verwenden könnte die höchste ID in einer Unterabfrage zu erhalten, und vergleichen Sie es mit die aktuelle ID von Instalments. Try this:

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

Dies ist genau das, was ich will. –

+0

Ich bin froh, dass ich helfen konnte –

+0

Ja! Du kannst weiter so bleiben. –

1

sind Sie sicher, dass Sie nicht immer für jeden Kunden die neuesten Raten brauchen?

Dies wäre:

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

Ja. Aber nicht Max (Datum) mit Max ID verwenden. Ihre Antwort ist nützlich für mich. –

Verwandte Themen