0

わかりましたので、date_created、last_login、last_updated などの複数の datetime 列があります。active_users をより簡単に追跡できるように、それらを 1 つの列にマージして、最新の datetime を表示したいと思います。

CONCAT コマンドを使用するためのいくつかの提案を見つけましたが、それはすべての結果をつなぎ合わせているだけのようです。

4

2 に答える 2

3

これを試して:

SELECT username, 
       GREATEST(date_created, last_login, last_updated) last_activity
FROM your_table
ORDER BY last_activity DESC

編集:

SELECT username, 
       GREATEST(
           IFNULL(date_created, 0), 
           IFNULL(last_login, 0), 
           IFNULL(last_updated, 0) 
       last_activity
FROM your_table
ORDER BY last_activity DESC

もう一度編集:
あなたのデータベースコピー(27.451レコードを持つ)で私が使用した:

SELECT id, 
       GREATEST(
           IFNULL(current_login_datetime, 0), 
           IFNULL(created_datetime, 0), 
           IFNULL(updated_datetime, 0)) 
       last_activity
FROM users
ORDER BY last_activity DESC

正確な 27.451 レコードを取得!!
証明するには、次のクエリを実行します。

SELECT COUNT(*) FROM
(SELECT id, 
       GREATEST(
           IFNULL(current_login_datetime, 0), 
           IFNULL(created_datetime, 0), 
           IFNULL(updated_datetime, 0)) 
       last_activity
FROM users
ORDER BY last_activity DESC) der

返された数がクエリと同じであることを確認します

SELECT COUNT(*) FROM users

問題は、返されたレコードまたは表示されたレコードの合計数の制限から派生している可能性があります。
たとえば、Navicat light を使用すると、1000 レコードを持つことができます (ただし、合計で 27.451 を読み取ることができます)。

于 2011-09-26T20:25:05.563 に答える
0

値が null になる可能性があり、最初の非値を選択したい場合は、nullCOALESCE を使用します。GREATESTオプションでLEASTもあります

SELECT 
  username
  ,COALESCE(last_updated,last_login,date_created) AS not_null
  ,GREATEST(date_created, last_login, last_updated) AS latest
  ,LEAST(date_created, last_login, last_updated) AS first
FROM table1
ORDER BY last_activity DESC

さらに制御したい場合は、CASE WHEN ステートメントを使用できます。

SELECT
  username
  , CASE WHEN date_created > '2011-01-31' THEN date_created
         WHEN last_login > '2011-01-31' THEN last_login
         ELSE last_updated END as its_complicated
.....

最新の値が必要nullで、値が変動している場合は、次のクエリを使用します。

SELECT 
  username
  ,GREATEST(IFNULL(date_created,0), IFNULL(last_login,0), IFNULL(last_updated,0)) AS latest
FROM table1
ORDER BY last_activity DESC
于 2011-09-26T20:42:33.257 に答える