如何找到用户点击的第二个不同的酒店

svgewumm  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(334)
userid  time        action  destination hotel
    97  00:00:00    Click   Rimini  Regina Elena 57
    97  00:03:53    Click   Rimini  Regina Elena 57
    97  00:01:16    Click   Rimini  Regina Elena 57
    97  00:04:34    Click   Rimini  Regina Elena 57
   129  00:07:32    Click   Berlin  Müggelsee Berlin
   129  00:18:36    Click   Berlin  SensCity Berlin Spandau
   129  00:16:12    Click   Berlin  Azimut Berlin City South

如何找到用户点击的第二个不同的酒店,如果用户没有点击两个不同的酒店,则显示空值。
预期产量

userid    hotel(2nd distinct hotel clicked by user,null if not found)
97        NULL
129       Berlin    SensCity Berlin Spandau
3bygqnnd

3bygqnnd1#

这个问题涉及排名。。
有多个方法一个方法是使用嵌套的 SUBSTRING_INDEX 函数来拆分 GROUP_CONCAT 带a的字符串 ORDER BY 选项函数。

SET SESSION group_concat_max_len = @@max_allowed_packet;

SELECT   
   Table1.userId
 , (
     CASE
      WHEN
        COUNT(DISTINCT Table1.hotel) >= 2
      THEN
        SUBSTRING_INDEX(
          SUBSTRING_INDEX(
              GROUP_CONCAT(Table1.destination ORDER BY Table1.time ASC)
            , ','
            , -1
          )
          , ','
          , 1
        )
      ELSE NULL
     END
    ) AS destination   
 , (
     CASE
      WHEN
        COUNT(DISTINCT Table1.hotel) >= 2
      THEN
        SUBSTRING_INDEX(
          SUBSTRING_INDEX(
              GROUP_CONCAT(Table1.hotel ORDER BY Table1.time ASC)
            , ','
            , -1
          )
          , ','
          , 1
        )
      ELSE NULL
     END
    ) AS hotel
FROM 
 Table1
GROUP BY 
 Table1.userId

请参见演示https://www.db-fiddle.com/f/3x1qkg3ahmz2dhaswsm1ay/3

相关问题