Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按最新日期列汇总表,从两列中仅选择一个值_Sql_Ms Access - Fatal编程技术网

Sql 按最新日期列汇总表,从两列中仅选择一个值

Sql 按最新日期列汇总表,从两列中仅选择一个值,sql,ms-access,Sql,Ms Access,我在MS access工作,访问轨道设备(设备参考位于第一列:EquipmentID,一些设备可以连接到其他设备或单独) 这张表与此相似 EquipmentID | AuxiliaryID | Location | LastDate | OtherInfo _____________________________________________________________ Truck 1 | Trailer 2 | Town 1 |01/02/2016| Info 1

我在MS access工作,访问轨道设备(设备参考位于第一列:EquipmentID,一些设备可以连接到其他设备或单独) 这张表与此相似

EquipmentID | AuxiliaryID | Location | LastDate | OtherInfo
_____________________________________________________________
Truck 1     | Trailer 2   | Town 1   |01/02/2016| Info 1     |
Truck 2     | Trailer 3   | Town 2   |01/03/2016| Info 2     |
Truck 3     |             | Town 3   |01/04/2016| Info 3     |
Truck 4     |             | Town 4   |01/05/2016| Info 4     |
Trailer 1   |             | Town 5   |01/06/2016| Info 5     |
Trailer 2   |             | Town 6   |01/01/2016| Info 6     |
Trailer 3   |             | Town 7   |01/08/2016| Info 7     |
我正在努力了解设备的状态(最新日期指定的最后位置)。我试图实现的目标如下表所示:

EquipmentID | AuxiliaryID | Location | LastDate | OtherInfo
_____________________________________________________________
Truck 1     | Trailer 2   | Town 1   |01/02/2016| Info 1
Truck 2     |             | Town 2   |01/03/2016| Info 2
Truck 3     |             | Town 3   |01/04/2016| Info 3
Truck 4     |             | Town 4   |01/05/2016| Info 4
Trailer 1   |             | Town 5   |01/06/2016| Info 5
Trailer 3   |             | Town 7   |01/08/2016| Info 7
  • 如果EquimentID中的值不在辅助ID中,则返回该行,例如:卡车3、卡车4、拖车3。退回那一排
  • 如果EquipmentID中的值出现在AuxliaryID(拖车2、拖车3)中,则比较日期(LastDate)以检查最新的日期。
    • 拖车2位于第一行和第六行,但第一行具有最新日期,因此不要返回第六行
    • 拖车3位于第二行和最后一行,但最后一行是最新日期,因此返回最后一行并从第一行删除辅助ID

我可以在SQL查询中这样做吗?

您可以通过查找最长日期并选择包含该信息的行来选择最后一行

这里有一种方法:

select t.*
from Trucks as t
where t.LastDate = (select max(t2.LastDate)
                    from Trucks as t2
                    where t2.EquipmentId = t.EquipmentId
                   );

请试试这个

SELECT
t1.EquipmentID, 
t2.EquipmentID as AuxiliaryID, 
t1.Location, 
t1.LastDate, 
t1.OtherInfo
FROM Trucks t1
left join Trucks t2 on t1.AuxiliaryID = t2.EquipmentID and t1.LastDate > t2.LastDate
inner join (
  select EquipmentID, max(LastDate) as MaxLastDate
  from (
    select EquipmentID, LastDate
    from Trucks
    UNION
    select AuxiliaryID, LastDate
    from Trucks where AuxiliaryID is not null) a
    group by EquipmentID) maxdates 
  on t1.EquipmentID = maxdates.EquipmentID and t1.LastDate = maxdates.MaxLastDate;
试试这个:

select
  max(case when src = 'e' then p.equipmentID end) as equipID,
  max(case when src = 'a' then p.EquipmentID end) as auxID,
  Location,
  t.LastDate,
  OtherInfo
from
  trucks t inner join
  (select
    src,
    EquipmentID,
    LastDate,
    ROW_NUMBER() OVER(PARTITION BY EquipmentID ORDER BY lastDate desc) rn
   from
    (SELECT 'e' as src, EquipmentID, LastDate FROM Trucks
     union all
     SELECT 'a' as src, AuxiliaryID, LastDate FROM Trucks 
            where AuxiliaryID is not null) u) p on
   rn = 1 and
   t.lastdate = p.LastDate and
   (t.equipmentid = p.equipmentid  or
    t.auxiliaryID = p.equipmentid ) 
group by Location, t.LastDate, OtherInfo
order by t.LastDate

请添加有关所需输出的更多说明。您希望输出与原始表相同,除非以下条件之一为真:1。设备在辅助ID列中的时间晚于在设备ID列中的时间,或2。一件设备在EquipmentID列中的时间晚于在辅助ID列中的时间。在案例1中,您希望返回设备位于辅助ID列中的记录。在案例2中,您希望将记录返回到设备ID列中的设备位置,而不希望将其显示在辅助ID列中的任何位置。感谢您重新表述我的请求a-cat-named-midnight谢谢您的回答。但是,我希望结果中的值在EquipmentID和AuxiliaryID@AminTN . . . 你的样本数据并非如此。如果你还有其他问题,那就把它当作另一个问题来问。以使答案无效的方式改变问题是不礼貌的。对不起,戈登。这个问题需要一个更好的描述,我已经把输入表和预期的输出。您的查询返回与输入相同的表。谢谢您的回答。谢谢你的回答,我选择了另一个答案,因为access支持行号