2

次のようなデータがあります。

name_text   ----------c_num---d_type-----unique_id----------------------v_text--r_ticket_id
29311875_FAD_V100.doc 3560709 Contract 21DABDDF49BA41289F1905D1D6B79ABF 2,01    28600206
29311875_FAD_V100.doc 3560709 Contract 21DABDDF49BA41289F1905D1D6B79ABF 2,01    28600240
Copy.docx             3560715 Guide    9D06F8EFF4EC4A2D862F5A0DB3BA357B 2       28600219

、、、、列の値が等しい場合、列r_ticket_idname_textc_numが大きい行を1つだけ選択したい。d_typeunique_idv_text

これらの場合、select ステートメントを使用して、この列だけをフェッチする必要があります。

name_text   ----------c_num---d_type-----unique_id----------------------v_text--r_ticket_id
29311875_FAD_V100.doc 3560709 Contract 21DABDDF49BA41289F1905D1D6B79ABF 2,01    28600240
Copy.docx             3560715 Guide    9D06F8EFF4EC4A2D862F5A0DB3BA357B 2       28600219

このジョブを実行する正確な SQL クエリは何ですか?

4

2 に答える 2

5

これは、レコードが同じ一意の ID を持ち、すべての列で異なる値を持つ場合に役立ちます。ROW_NUMBERウィンドウ機能を利用します。それらは既に sql-server 2005 に存在していると思います。

SELECT name_text,c_num,d_type,unique_id,v_text,r_ticket_id
FROM
    (
        SELECT  name_text, c_num, d_type, unique_id, v_text, r_ticket_id,
                ROW_NUMBER() OVER (PARTITION BY unique_id 
                                   ORDER BY r_ticket_id DESC) rn
        FROM tableName
    ) x
WHERE x.rn = 1

SQLFiddle デモ

于 2012-10-21T14:38:10.017 に答える
2

SQLでは、GROUP BY繰り返される行を統合できるようにする操作があります。r_ticket_id.あなたの質問では、SQLで関数に変換される最大の値を見つけたいということを除いて、すべて同じ値をロールアップしたいと考えていMAXます。

SELECT
    name_text
,   c_num
,   d_type
,   unique_id
,   v_text
,   MAX(r_ticket_id) AS max_r_ticket_id
FROM
    dbo.MyTableNameHere
GROUP BY
    name_text
,   c_num
,   d_type
,   unique_id
,   v_text
于 2012-10-21T14:38:22.297 に答える