0

sales列と呼ばれる単純なテーブルがあります

createdon, saleid, customerid 

他のテーブルcustomer列のあるテーブルがあります

customerid, name, etc..

今、私はクライアントによる最後の5つの販売が必要です。

scanned私が持っていると呼ばれる他のテーブルで

scannedid,saleid,customerid

過去5回の販売でスキャンされたクライアントを取得するには、クライアントごとに最後の5回のsalesidが必要だと思います(たとえば、月曜日から土曜日に顧客が訪問されるなど、販売は同じ日ではありませんが、火曜日と木曜日に訪問されますが、この情報この例では重要ではありません)

私の本当の質問は

過去5回の販売でスキャンされたcustomersidを取得するにはどうすればよいですか?

そのためには、たとえば、クライアントごとに最後の5つのsalesidを取得するためのクエリが必要だと思います。3人の顧客がいる場合、customer1、customer2、customer3の最後の5つのsalesが必要です。その後、15個のsaleidが返されます。

4

1 に答える 1

1

クライアントとは、customeridを意味すると思います。作成日を降順に基づいて、売上の最初の5つのレコードが必要だと思います。正確な構文はデータベースによって異なります。これが1つの方法です:

select top 5 customerid
from sales s
order by createdon desc

そして別の方法:

select customerid
from sales s
order by createdon desc
limit 5

そして別の方法:

select *
from (select customerid, rownum as seqnum
      from sales
      order by createdon
     ) s
where seqnum <= 5

必要なものを明確にしたので、簡単です。

select *
from (select s.*,
             row_number() over (partition by customerid order by created on desc) as seqnum
      from sales s
     ) s
where seqnum <= 5
于 2012-12-10T23:57:23.060 に答える