选择组中的条件数据
我有一张表,其中包含借给用户的计算机列表。每次机器退回时我们都会进行输入。我用下面的语句由用户,机器#,日期和动作选择组中的条件数据
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
我寻找帮助修改查询只返回最近的一个项目,返回一个列表,并且只有当该机器当前不在时。
在此先感谢您提供的任何环境!
可以使用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'
在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
这将返回最晚时间机器出去?不要以为这是OP后 – Andomar 2012-01-10 21:36:07
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
按评论。
应该工作,如果你改变'where i.in_out'到'where o.in_out' – Andomar 2012-01-10 21:37:11
谢谢你指出我的错误。你是对的。我编辑了答案。 – 2012-01-10 21:39:36
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
固定
SELECT名称,资产号,日期的InOut
FROM表,其中的InOut = '出' ORDER BY日期递减
upvote for a correct answer,并纠正其他人的 – 2012-01-10 21:49:08
像梦一样工作。谢谢! – jimb0z 2012-01-11 08:23:37