1

具体的には、セッションに複数のクリックが関連付けられており、各クリックに対応する日時があります。セッションごとに、フィールドとして「first_click_datetime」、「second_click_datetime」、「third_click_datetime」などを選択したいと思います。

これまでのところ、私はこのようなものを持っています:

SELECT session_id, 
min(click_datetime) as first_click_datetime,
CASE
  when total_number_of_clicks = 2 then max(click_datetime)
/* when total_number_of_clicks >2 then ???? */
  else null
END as second_click_datetime
FROM table1 GROUP BY 1;

2番目、3番目、4番目などのclick_datetimeを取得するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

1
SELECT  session_id,
        (
        SELECT  click_datetime
        FROM    table1 t1
        WHERE   t1.session_id = td.session_id
        ORDER BY
                session_id DESC, click_datetime DESC, id DESC
        LIMIT   1
        ) AS first_click,
        (
        SELECT  click_datetime
        FROM    table1 t1
        WHERE   t1.session_id = td.session_id
        ORDER BY
                session_id DESC, click_datetime DESC, id DESC
        LIMIT   1, 1
        ) AS second_click,

        (
        SELECT  click_datetime
        FROM    table1 t1
        WHERE   t1.session_id = td.session_id
        ORDER BY
                session_id DESC, click_datetime DESC, id DESC
        LIMIT   2, 1
        ) AS third_click
FROM    (
        SELECT  DISTINCT session_id
        FROM    table1
        ) td

これが高速に動作するようにインデックスを作成します(session_id, click_datetime, id)

于 2012-05-18T12:22:09.663 に答える