Search code examples
sqlsql-serverselectjoinlimit

SQL limit with joins


I have problems with getting only first row of next query:

Select mar.Title MarketTitle, ololo.NUMBER, ololo.Title from Markets mar
JOIN( 
    Select emp.Employee_ID, emp.Market_id, ppp.Title, ppp.NUMBER from Employees emp
    JOIN(
    select pur.Employee_id Empl,Pro.Title Title, COUNT(pur.Product_id) NUMBER from Purchase pur
    LEFT JOIN  
        Payments pay ON pay.Payment_ID = pur.Payment_ID AND pay.Date > DATEADD(month, -1, GETDATE())
    RIGHT JOIN Products pro
    ON pur.Product_id = pro.Product_ID
    GROUP BY Pro.Title, pur.Employee_id) ppp ON ppp.Empl = emp.Employee_id) ololo
ON mar.Market_ID = ololo.Market_id
ORDER BY NUMBER DESC

I tried a lot of combination of inserting "limit 1", but all of them get errors. Could anyone help?


Solution

  • LIMIT will not work with SQL Server.

    Use TOP 1 instead:

    SELECT TOP 1 mar.Title MarketTitle, ololo.NUMBER, ololo.Title from Markets mar
    JOIN( 
        Select emp.Employee_ID, emp.Market_id, ppp.Title, ppp.NUMBER from Employees emp
        JOIN(
        select pur.Employee_id Empl,Pro.Title Title, COUNT(pur.Product_id) NUMBER from Purchase pur
        LEFT JOIN  
            Payments pay ON pay.Payment_ID = pur.Payment_ID AND pay.Date > DATEADD(month, -1, GETDATE())
        RIGHT JOIN Products pro
        ON pur.Product_id = pro.Product_ID
        GROUP BY Pro.Title, pur.Employee_id) ppp ON ppp.Empl = emp.Employee_id) ololo
    ON mar.Market_ID = ololo.Market_id
    ORDER BY NUMBER DESC
    

    or OFFSET-FETCH with SQL Server 2012+:

    SELECT  mar.Title MarketTitle, ololo.NUMBER, ololo.Title from Markets mar
    JOIN( 
        Select emp.Employee_ID, emp.Market_id, ppp.Title, ppp.NUMBER from Employees emp
        JOIN(
        select pur.Employee_id Empl,Pro.Title Title, COUNT(pur.Product_id) NUMBER from Purchase pur
        LEFT JOIN  
            Payments pay ON pay.Payment_ID = pur.Payment_ID AND pay.Date > DATEADD(month, -1, GETDATE())
        RIGHT JOIN Products pro
        ON pur.Product_id = pro.Product_ID
        GROUP BY Pro.Title, pur.Employee_id) ppp ON ppp.Empl = emp.Employee_id) ololo
    ON mar.Market_ID = ololo.Market_id
    ORDER BY NUMBER DESC
    OFFSET 0 ROWS
    FETCH FIRST 1 ROW ONLY