1

MySQLにlimitコマンドがあることは知っていますが、SQL Server 2008でどのコマンドを使用すべきかわかりませんか?

clientIdと各ピックアップの最終日を選択する必要があります。ほとんどのクライアントには、複数のピックアップがあります(65 000 +ピックアップテーブルのレコード)。

select  P.ClientID,LastName+' '+FirsName as Name , Adress,p.PickupDate
from Pickup P,Clients C
where P.ClientID= C.ClientID
order by PickupDate desc limit 1


throwing error *Msg 102, Level 15, State 1, Line 4
Incorrect syntax near 'limit'.*
because **LIMIT** is not key word in SQL server
4

3 に答える 3

3

limitコマンドはSQLServerのトップです

select top 1 P.ClientID
   ,LastName+' '+FirsName as Name 
   ,Adress
   ,p.PickupDate
from Pickup P
join Clients C on P.ClientID= C.ClientID
order by PickupDate desc 

ポスターの説明ごとに-これはトップ/リミットの質問でさえありません。これは、ステートメントごとの単純なグループです。

select P.ClientID
   ,LastName+' '+FirsName as Name 
   ,Adress
   ,max(p.PickupDate)
from Pickup P
join Clients C on P.ClientID= C.ClientID
group by p.clientid, lastname + ' ' + firsname,adress
于 2013-02-25T04:50:09.720 に答える
1

これは通常(2012年以前)ウィンドウ関数を使用して行われます:

;WITH Data
AS
    (
    SELECT P.ClientID
        , LastName + ' ' + FirsName as Name
        , Address
        , PickupDate
        , ROW_NUMBER() OVER(PARTITION BY P.ClientID ORDER BY PickupDate DESC)
            AS [Entry #]
    FROM Pickup P
    JOIN Clients C
        ON P.ClientID= C.ClientID
    )
SELECT *
FROM Data
WHERE [Entry #] = 1
ORDER BY PickupDate DESC

テクニックのいくつかの優れた機能強化については、このブログ投稿を参照してください(不要な行のスキャンを回避するため)。

于 2013-02-25T04:26:30.897 に答える
1

これを試して

select P.ClientID, LastName+' '+FirsName as 'Name', Adress, max(p.PickupDate)
from Pickup P,Clients C
where P.ClientID= C.ClientID
GROUP BY P.ClientID, Adress, LastName+' '+FirsName
order by PickupDate desc

フィドル

于 2013-02-25T04:27:09.547 に答える