1

この構文のみを使用するように制限されているとしましょう(MAXやMINなどの集計関数は使用できません。また、GROUP BY句も使用できません。理由を聞かないでください)。

{SQL query} ::= SELECT [DISTINCT | ALL] [TOP {integer}]
                {select_list}
                FROM {table_reference}
                [WHERE {search_condition}]
                [ORDER BY {orderby} { ',' {orderby} } ]

識別子がITEM_IDと呼ばれるITEMテーブルがあるとしましょう。特定のITEM_IDに対して、同じITEM_IDであるが、SHIP_DATEが異なる多くの行を持つことができます。前の構文で最新のSHIP_DATEを持つITEMSのみを返すクエリをどのように記述しますか?

TOP N(結果セットの最初の行を取得するため)とORDER BY(最大SHIP_DATEから最小SHIP_DATEまでソートするため)を組み合わせて使用​​してみました。何かアイデアや提案はありますか?

私が試したのは次のようなものです。

SELECT TOP N * FROM ITEM WHERE ITEM_ID='X' ORDER BY SHIP_DATE DESC 

実際、前のクエリは機能しているようですが、もっと良い方法があるかどうか疑問に思っています。

これは宿題ではありません。サポートされているFileNetP8構文を使用してクエリを作成する必要があります:http://publib.boulder.ibm.com/infocenter/p8docs/v4r5m1/index.jsp ?topic = / com.ibm.p8.doc /developer_help/content_engine_api/guide/query_sql_syntax_ref.htm

4

4 に答える 4

1

絶対に最新のship_dateを持つアイテムが1つだけ欲しいですか?もしそうなら、あなたのクエリはまさに正しいです:

SELECT TOP 1 * FROM ITEM WHERE ITEM_ID='X' ORDER BY SHIP_DATE DESC 

唯一の問題は、SHIP_DATE が細かいもの (datetime など) ではなく粗いもの (カレンダーの日付など) である場合、同点になる可能性があることです。その場合、データベース エンジンはそれらの 1 つを選択するだけで、それがどのように判断されるかは事前にわかりません。したがって、決定論的にするためだけに、注文に別の列を追加することを検討することをお勧めします。

于 2009-10-21T00:39:39.550 に答える
1

ITEM.ship_date が他の ITEM レコードと同じ日付に該当しないと仮定すると、次のようになります。

  SELECT TOP x
         i.item_id,
         i.ship_date
    FROM ITEM i 
ORDER BY i.ship_date DESC

...ここで、x は一意/個別のITEM.item_idレコードの数です。COUNT を使用できずにどうやってそれを取得できますか...

ORDER BY i.ship_date DESC結果セットの一番上に最新の ship_date レコードを表示するには、これを使用する必要があります。

于 2009-10-21T00:40:03.920 に答える
1
select distinct item_id from item 
where ship_date = 
   (select top 1 ship_date from item order by ship_date desc)
于 2009-10-21T00:49:33.233 に答える
0

あなたの構文はそこにあるように厳密ですか、それとも列ごとにすべてを指定することはできますか? たとえば、次のようなことができますか。

SELECT ship_date, DISTINCT item_id FROM tablename ORDER BY ship_date;

もしそうなら、それはうまくいきますか?

そうでない場合、クエリをネストできますか? (つまり、table_reference の代わりにサブクエリを使用します)

于 2009-10-21T00:17:35.877 に答える