выберите условные данные в группах - PullRequest
1 голос
/ 11 января 2012

У меня есть таблица со списком машин, которые одалживаются пользователям.Запись делается каждый раз, когда машина возвращается, вынуты.Я использую следующий оператор для возврата списка по пользователю, номеру машины, дате и действию

SELECT Name, Asset#, Date, InOut
FROM Table
ORDER BY Asset#, date asc

, который возвращает

Name      Asset#       Date        InOut
Jimmy     BER210    2009-05-08      out
Jimmy     BER210    2009-06-08      in
Jimmy     BER210    2009-07-08      out
Sam       BER220    2009-05-08      out
Sam       BER220    2009-06-08      In
Jack      BER230    2009-05-08      out
Jack      BER230    2009-06-08      In
Jack      BER230    2009-07-08      out

Я ищу помощь в изменении этого запроса для возврата ТОЛЬКОсамая последняя запись, и ТОЛЬКО если эта машина в данный момент не работает.

Заранее благодарим за любую предоставленную вами оценку!

Ответы [ 5 ]

3 голосов
/ 11 января 2012

Вы можете использовать inner join, чтобы отфильтровать более старые строки для каждой машины. Если у вас есть последние строки, where может использоваться для выбора машин, которые "отсутствуют".

select  Name, Asset#, Date, InOut
from    Table t
join    (
        select  Asset#
        ,       max(Date) as MaxDate
        from    Table
        group by
                Asset#
        ) filter
on      filter.Asset# = t.Asset#
        and filter.MaxDate = t.Date
where   t.InOut = 'Out'
1 голос
/ 11 января 2012
select Name, Asset#, Date, InOut
 from Table
   natural join (
    select Asset#, max(Date) as Date
    from Table
    group by Asset#
  )
where InOut = 'out'
order by date desc

фиксированный

0 голосов
/ 11 января 2012

ВЫБЕРИТЕ имя, номер актива, дату, выход

ИЗ таблицы ГДЕ InOut = 'out' ЗАКАЗАТЬ по дате desc

0 голосов
/ 11 января 2012
SELECT Name, Asset#, Date, InOut
FROM Table o
WHERE Date = (select max(Date) from 
              Table i 
              where i.Asset# = o.Asset#
             )
)
where o.in_out = 'out'
ORDER BY Asset#, date asc

Редактировать Изменено i.in_out на o.in_out согласно комментарию.

0 голосов
/ 11 января 2012

В SQLServer

SELECT TOP 1 Name, Asset#, Date, InOut
FROM Table
WHERE InOut = 'out'
ORDER BY Date DESC

В MySQL

SELECT Name, Asset#, Date, InOut
FROM Table
WHERE InOut = 'out'
ORDER BY Date DESC
LIMIT 1
...