Как определить значение, измененное в том же столбце, с помощью сервера SQL - PullRequest
0 голосов
/ 08 мая 2020

Мне нужна ваша помощь, чтобы рассчитать количество дней между двумя строками на основе изменения значения в том же столбце

Вот моя исходная таблица

USER_ID LOGIN_DATE  USER_AGNT_STR
-----------------------------------------------------------------------------------------------------------------
100033  2020-02-18  {'HTTP_USER_AGENT':'/x.x.x Version x.0, build 14623 (iPhoneX;Apple iPhone10,3; iOS 13.3.1)'}
100033  2020-02-19  {'HTTP_USER_AGENT':'/x.x.x Version x.0, build 14623 (iPhoneX;Apple iPhone10,3; iOS 13.3.1)'}
100033  2020-02-19  {'HTTP_USER_AGENT':'/x.x.x Version x.1, build 14624 (iPhoneX;Apple iPhone10,3; iOS 13.3.1)'}
100056  2020-02-20  {'HTTP_USER_AGENT':'/x.x.x Version x.0, build 14623 (iPhoneX;Apple iPhone10,3; iOS 13.3.1)'}
100056  2020-02-21  {'HTTP_USER_AGENT':'/x.x.x Version x.1, build 14624 (iPhoneX;Apple iPhone10,3; iOS 13.3.1)'}

Я написал приведенный ниже код для получить версию приложения с помощью функции подстроки, но я все еще не могу найти способ подсчитать количество дней, в течение которых пользователю потребовалось перейти с x.0 на x.1. Пожалуйста, помогите

DECLARE @t as DATE = '2020-02-25'

SELECT DISTINCT 
    A.USER_ID, LOGIN_DATE,
    SUBSTRING(user_agnt_str, 
              CHARINDEX(' version ', user_agnt_str) + 9,
              CHARINDEX(' ', user_agnt_str, CHARINDEX(' version ', user_agnt_str) + 9) 
                                            - CHARINDEX(' version ', user_agnt_str) - 10) AS APP_VERSION
FROM 
    [DB1].[dbo].[TABLE1]
WHERE
    (USER_AGNT_STR LIKE '%version %' OR USER_AGNT_STR LIKE '%Version %')
    AND CAST(LOGIN_DATE AS DATE) BETWEEN DATEADD(DAY, -7, @t) AND @t
    AND USER_ID IN (100033, 100056)

Результат, который я получаю от этого запроса:

USER_ID LOGIN_DATE  APP_VERSION
--------------------------------
100033  2020-02-18  4.0
100033  2020-02-19  4.0
100033  2020-02-19  4.1
100056  2020-02-20  4.0
100056  2020-02-21  4.1

Результат, который я ищу, должен быть:

USER_ID PREVIOUS_APP_VERSION    Current_APP_VERSION NUMBER_OF_DAYS
------------------------------------------------------------------
100033  4.0                     4.1                 0
100056  4.0                     4.1                 1
...