1

こんにちは私は多くのユーザーのためにユーザーごとに最後のログエントリを選択することを想定しているSQLに問題があります。これは私のテーブルがどのように見えるかのサンプルです

user_id |   date
--------------------
    1       2013-03-06 10:00:00
    17      2013-03-06 11:00:00
    2       2013-03-06 10:00:00
    5       2013-03-06 10:00:00
    1       2013-03-06 11:00:00
    17      2013-03-06 13:00:00
    17      2013-03-06 13:01:00
    2       2013-03-06 14:01:00
    2       2013-03-06 15:00:00
    2       2013-03-06 18:01:00

このクエリの結果は次のようになります。

user_id |   date
--------------------
    1       2013-03-06 11:00:00
    2       2013-03-06 18:01:00
    5       2013-03-06 10:00:00
    17      2013-03-06 13:01:00

今のところ私はこのクエリを使用しています

SELECT 
    a.user_id,
    (SELECT b.date FROM alerts.alerts_log as b WHERE b.user_id = a.user_id ORDER BY b.date DESC LIMIT 1) as date
FROM 
    alerts.alerts_log  as a
WHERE 
    a.user_id IN  (1,2,5,17) 
GROUP BY a.user_id

しかし、多くのレコードには遅すぎるので、私はそれが最高のものだとは思いません...plsは私にもっと良いものを提案できますか

4

2 に答える 2

5
SELECT user_id , MAX(date)
FROM alerts.alerts_log
GROUP BY user_id;
于 2013-03-08T08:45:30.803 に答える
4

テーブルに列が2つしかない場合は、以下のクエリで十分です。

SELECT  user_ID, MAX(date) max_date
FROM    tableName
GROUP   BY user_ID

ただし、そうでなく、行内のすべての列を取得する場合は、ごとに最大日付を個別に取得するサブクエリが必要ですuser_ID

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  user_ID, MAX(date) max_date
            FROM    tableName
            GROUP   BY user_ID
        ) b ON a.user_ID = b.user_ID AND
                a.date = b.max_date
于 2013-03-08T08:44:47.487 に答える