こんにちは、トップ 10 の製品を取得するのに問題があります。
シナリオは次のとおりです。productid と date を含む製品のテーブルがあります。IDで製品を取得してループする方法がありますが、最も頻繁にリストされている製品を取得する方法がわかりません。
範囲の日付から上位 10 個の製品を取得する必要があります。
基本的に、在庫のある製品のリストと製品FKの注文のリストがあります
各注文から製品 FK を取得し、すべての注文から最も頻繁に使用される上位 10 製品を取得します。
sql と asp.net でタグ付けしたように、それは sql server db である必要があります。
2 つの日付の間の日付の製品テーブルから上位 10 個の product_idを取得できます(日付をvarcharまたはテキストとして入力している場合は、それを datetime 形式に変換する必要があります)。10個の最新製品を提供します。
ここにコード例があります。
SELECT TOP 5 Product_ID FROM Product where Product.Dates between (SELECT convert(datetime, '2012-04-17 14:42:06.273', 120)) and (SELECT convert(datetime, '2012-04-19 10:39:08.477', 120)) order by Product.Dates desc
これが役立つ場合があります。両方のクエリを日付で分割できます。
-- Top n-paid in all Depts:
SELECT * FROM
( SELECT deptno, ename, sal
, ROW_NUMBER() OVER (order by sal desc, ename) as row_num
--, RANK () OVER (PARTITION BY deptno ORDER BY sal desc) ranks
--, DENSE_RANK () OVER (PARTITION BY deptno ORDER BY sal desc) d_ranks
FROM scott.emp )
WHERE row_num <= 10 -- TOP 10 in all depts --
-- Between rows --
SELECT * FROM
( SELECT deptno, ename, sal, ROW_NUMBER() OVER (ORDER BY ename) Row_Num FROM scott.emp)
WHERE Row_Num BETWEEN 5 and 10
ストアド プロシージャを作成してテーブルを呼び出すだけで、製品リストを簡単に選択できます。
ストアド プロシージャでは、次を使用して製品リストを選択できます。
ORDER BY
たとえばの句。
SELECT * FROM PRODUCT_TABLE ORDER BY DATE_COLUMN
ありがとう
私たちのタグに基づいて、あなたは SQL データベースを使用していると推測しています。あなたの質問から、同じ製品を複数回リストしていることがわかります...その場合は、次のようなことができます。
Select * From "table" Group By "product" order by count(*) limit 10