3

返品されたセットを注文しようとしていますが、正しく注文するのに苦労しています。

フィールドを選択していますが、各フィールドにはdate_updatedと がありdate_addedます。フィールドが追加さdate_updatedれると、更新が行われるまで null になり、その後、現在の日付が割り当てられます。

最新のエントリを一番下に、最も古いエントリを一番上にして、リストを並べ替える必要があります。そのため、アイテムが追加された場合、それは直接一番下に移動する必要があります。すべての日付フィールドを結合し、更新または追加を無視して、古いものから新しいものへと並べ替える方法はありますか?

これはややこしいように聞こえるかもしれませんが、私はすでにORDER BY date_added DESC, date_updated ASC、およびそのようなものの多数の組み合わせを試しましたが、必要なことを実行していません。私は注文された上部を取得し、date_addedその下には別の注文がありdate_updatedます...

ここでの入力は本当に役に立ちます...

4

4 に答える 4

4

試す

order by coalesce(date_updated, date_added)

COALESCE DOC

于 2012-09-21T16:57:47.613 に答える
1

CASEステートメントを試すことができます

SELECT 
    firstname, 
    lastname, 
    date_added, 
    date_updated, 
    CASE date_updated IS NULL 
        THEN date_added 
        ELSE date_updated 
    END CASE AS order_date  
FROM mytable 
ORDER BY order_date DESC

date_updatedこれが行うことは、が nullかどうかをチェックし、新しい列に の値を入れることですdate_added。そうでない場合は、date_updated. 新しい列が呼び出さorder_dateれ、並べ替えに使用されます。

ORDER BY 句に CASE ステートメントを追加することもできますが、データを構築するときと比較してインデックスで連結を行う必要があるため、クエリが遅くなる可能性があります。決定的ではありませんが、SELECT と ORDER BY で CASE を使用すると、パフォーマンスがわずかに向上することがわかりました。

于 2012-09-21T17:00:55.480 に答える
0

条項で使用CASEします。Order By

ORDER BY CASE WHEN date_updated IS NULL
              THEN 0 
              ELSE 1
          END DESC, date_added DESC
于 2012-09-21T16:57:47.650 に答える
0
Order by IsNull(DateUpdated,DateAdded)

一方向になります

于 2012-09-21T16:58:19.443 に答える