sql >> データベース >  >> RDS >> Mysql

個別のユーザーセッションのリストから最も早い日付と時刻を選択します

    これは、StackOverflowで週に数回発生する「グループあたりの最大数」の問題のバリエーションです。

    SELECT 
            a1.accessid, 
            a1.date, 
            a1.time 
    FROM 
            accesslog a1
    LEFT OUTER JOIN
            accesslog a2
      ON (a1.accessid = a2.accessid AND a1.userid = a2.userid
        AND (a1.date > a2.date OR a1.date = a2.date AND a1.time > a2.time))
    WHERE a1.userid = '1234'
      AND a2.accessid IS NULL;
    

    これが機能する方法は、同じaccessidとuseridを持ち、行a1よりも早い日付または時刻を持つ行(a2)を見つけようとすることです。以前の行が見つからない場合、a1はである必要があります 最も早い行。

    あなたのコメントを再確認してください、私はあなたが提供したサンプルデータでそれを試しました。これが私が得るものです:

    +----------+------------+----------+
    | accessid | date       | time     |
    +----------+------------+----------+
    |        1 | 2009-08-15 | 01:01:01 | 
    |        2 | 2009-09-01 | 14:01:01 | 
    +----------+------------+----------+
    

    MacOSXでMySQL5.0.75を使用しています。



    1. SQLクエリを使用してデータベースに日付ではなく時間のみを保存する方法

    2. .netエンティティフレームワークとOracle11g

    3. MySQL各一意の値の最初の出現時に行を選択します

    4. SQLでのテーブルの結合