2

このようなクエリがある場合

$line_item_status_query = 
"SELECT p.description, 
       p.production_order_id, 
       l.start_user, 
       p.sequence, 
       l.start :: date, 
       l.stop :: date, 
       pr.id, 
       pr.process, 
       pr.process_sequence, 
       pr.caption_in_process, 
       pr.caption_closed, 
       pr.show_to_customer 
FROM   production_order_processes p 
       LEFT JOIN production_order_process_log l 
              ON l.production_order_process_id = p.id 
       LEFT JOIN processes pr 
              ON pr.process_sequence = p.sequence 
WHERE  l.production_order_id = (SELECT id 
                                FROM   production_orders 
                                WHERE 
       sales_order_line_id = '".$sales_order_line_id."') 
ORDER  BY p.sequence";

およびl.start :: date/またはl.stop :: datenullまたは空の可能性がありますが、ORDER BYどの日付が新しいかに基づいて、返された結果を昇順(または降順)に配置できるようにするにはどうすればよいですか?

順序をp.sequenceで条件付きロジックに置き換えたいのですが、深みがありません。

助けてくれてありがとう!

4

3 に答える 3

4

ケースステートメント付き

 ORDER BY 
    CASE 
    WHEN l.start>l.stop THEN l.start 
    ELSE COALESCE(l.stop, l.start) 
    END 

編集: これは一般的な SQL ソリューションですが、プラットフォームがサポートしている場合は、Frank Heikens の GREATEST の回答の方が適切です。

于 2012-07-19T10:14:14.863 に答える
3

GREATEST()を使用します。

ORDER BY
  GREATEST(l.start, l.stop)
于 2012-07-19T10:42:54.800 に答える
0

どちらか新しい日付に基づいて、あなたのフレーズを理解できるかどうかわかりません。caseただし、次の順序で使用できます。

ORDER BY (case when l.start is null and l.stop is null then null
               when l.start is null then l.stop
               when l.stop is null then l.start
               when l.start > l.stop then l.start
               else l.stop
          end)

これはソートに使用されます:

  • l.startl.stopnullの場合
  • l.stopl.startnullの場合
  • のより新しいものでl.stopありl.start、両方がそうでない場合null
  • null両方の場合null
于 2012-07-19T10:17:13.160 に答える