MYSQL - Выбрать только записи, отличающиеся от столбца предыдущей записи - PullRequest
0 голосов
/ 26 марта 2020

Надеясь, что это возможно только с sql. У меня есть запрос, который возвращает набор данных со столбцами time_stamp и hash_index. По сути, что-то вроде:

1   1583365548  6ff11ad5536f28d66098f6d74f97d877
2   1583365554  6ff11ad5536f28d66098f6d74f97d877
3   1583365556  6ff11ad5536f28d66098f6d74f97d877
4   1583365562  a2e99acb2540d49955ef93fb2684ac25
5   1583365571  a2e99acb2540d49955ef93fb2684ac25
6   1583365572  a2e99acb2540d49955ef93fb2684ac25
7   1583365574  a2e99acb2540d49955ef93fb2684ac25
8   1583365578  a2e99acb2540d49955ef93fb2684ac25
9   1583365580  a2e99acb2540d49955ef93fb2684ac25

Что я хочу сделать, это дополнительно отфильтровать этот запрос, чтобы включить запись, только если hash_index отличается от предыдущей записи. Это то, что я могу сделать, не выкидывая в PHP и l oop через него?

Мой текущий запрос ниже:

SELECT 
    (@cnt:=@cnt + 1) AS row_number,
    time_stamp,
    MD5(GROUP_CONCAT(CONCAT(user_state_name,
                        option_id,
                        option_code,
                        item_id,
                        item_code))) AS hash_index
FROM
    user_state
WHERE
    user_id = 2
GROUP BY
    time_stamp;

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Если вы хотите отфильтровать соседние дубликаты, я бы просто использовал lag() и обошелся без хеширования и агрегирования:

SELECT us.*
FROM (SELECT us.*,
             LAG(time_stamp) OVER (PARTITION BY user_id ORDER BY time_stamp) as prev_ts,
             LAG(time_stamp) OVER (PARTITION BY user_id, user_state_nae, option_id, option_code, item_id, item_code ORDER BY time_stamp) as prev_ts_values
      FROM user_state us
      WHERE user_id = 2
     ) t
WHERE prev_ts_values is null or prev_ts_values <> prev_ts;

Вы можете выбрать любые строки, которые вы хотите.

0 голосов
/ 26 марта 2020

Что с таким запросом:

SELECT t1.*
FROM user_state t1
LEFT JOIN user_state t2 ON t1.id-1 = t2.id
WHERE t1.hash_index <> t2.hash_index;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...