Ответы пользователя по тегу SQL
  • Как составить SQL запрос для подставления значения по времени?

    @DKSoft
    В вопросе не указана БД (((
    Для MySQL
    select l.*
          ,(select new_status 
              from change_log ch
                where ch.id=l.id 
                   and ch.date<=l.date_message 
                     order by ch.date desc 
                       limit 1) as state
     from List l

    В общем случае
    select l.*
          ,(select new_status
             from change_log ch 
              where ch.id=l.id 
                  and ch.date=(select max(ch.date) 
                                        from change_log ch
                                          where ch.date<=l.date_message)
         ) as state
     from List l
    Ответ написан
    Комментировать
  • Как с помощью SQL запроса выбрать из строки значения и посчитать их уникальное количество?

    @DKSoft
    Можно попробовать так
    with a as  #преобоазуем в json массив
    (select id,concat('[',replace(descr,'}{','},{'),']') as d1
     from x1
    )
    ,b as ( # массив в таблицу
    select id,JSON_EXTRACT(d1, '$[1]') as d2
     from a
    union all
    select id,JSON_EXTRACT(d1, '$[2]') as d2
     from a
    union all
    select id,JSON_EXTRACT(d1, '$[3]') as d2
     from a
    union all
    select id,JSON_EXTRACT(d1, '$[4]') as d2
     from a
    union all
    select id,JSON_EXTRACT(d1, '$[5]') as d2
     from a
    union all
    select id,JSON_EXTRACT(d1, '$[6]') as d2
     from a
    union all
    select id,JSON_EXTRACT(d1, '$[7]') as d2
     from a
    union all
    select id,JSON_EXTRACT(d1, '$[8]') as d2
     from a
    union all
    select id,JSON_EXTRACT(d1, '$[9]') as d2
     from a
    union all
    select id,JSON_EXTRACT(d1, '$[10]') as d2
     from a
    )
    -- подсчет
    select id,count(distinct JSON_VALUE(d2,'$.DeviceID')) as count
    from b
    where b.d2 is not null
    group by id

    если в поле descr больше 10 элементиов то надо добавить в b допролнительные union all
    Ответ написан
    Комментировать