выбор каждой новой строки для конкретных значений - PullRequest
0 голосов
/ 03 января 2019

Привет, у меня есть таблица, похожая на такую:

SN  | User | is_borrowed | date
105 |  1   |      1      |2019-1-1
105 |  1   |      0      |2019-2-1
105 |  1   |      1      |2019-3-1
106 |  2   |      1      |2019-4-1
107 |  1   |      1      |2019-5-1
106 |  2   |      0      |2019-6-1
106 |  2   |      1      |2019-8-1
107 |  1   |      0      |2019-9-1
107 |  2   |      1      |2019-10-1

Требуется вывод, чтобы показать, что заимствовано (не возвращено) и пользователь = 1:

SN  | User | is_borrowed | date
105 |  1   |      1      |2019-3-1

Вывод для пользователя =2 и заимствовано (не возвращено):

SN  | User | is_borrowed | date
106 |  2   |      1      |2019-8-1
107 |  2   |      1      |2019-10-1

В заключение я хочу получить список заимствованных устройств, которые не возвращаются для каждого пользователя.К сожалению, мне ничего не приходит в голову, хотя: /

Ответы [ 2 ]

0 голосов
/ 03 января 2019
SELECT t.sn, t.user, t.is_borrowed, t.date
FROM TABLE_NAME t
WHERE t.is_borrowed = 1
AND t.date =
              ( 
                  SELECT MAX(x.date)
                  FROM TABLE_NAME x
                  WHERE x.user = t.user
              )
AND (
     SELECT xx.is_borrowed
     FROM TABLE_NAME xx
     WHERE t.sn = xx.sn
     AND t.date < xx.date
     ) <> 0
;
0 голосов
/ 03 января 2019

ищет ожидаемый результат, кажется, вы ищете максимальную (дату) для SN, пользователь, где is_borrowed = 1

select SN, user, is_borrowed,  max(date)
from my_table 
where is_borrowed = 1 
group by  SN, user, is_borrowed

или за устройство фактически заимствовано

Select * from my_table m
inner join t (
  select SN, is_borrowed,  max(date) max_date 
  from my_table 
  where is_borrowed = 1 
  group by  SN,  is_borrowed
) t on t.SN =  m.SN AND t.max_date = m.date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...