我试图从数据库中的三个表中创建一个视图。
sql - 在MS SQL Server的VIEW中整理出最新的Filedate-LMLPHP
我只想显示我最近的文件时间。如你所见,我有一辆车,它根据文件时间显示两个不同的值(我用一个红色正方形标记了该区域)。
我只想显示最新的文件时间。我该怎么做?我试过使用“组”和“最大值”,但没用。这是我当前的代码:

SELECT TOP (100) PERCENT MAX(db_ddladmin.Data_Readouts.ReadOutID) AS ReadOutID,
          db_ddladmin.Data_Values.Identifier, db_ddladmin.Data_Values.ECU,
          MAX(db_ddladmin.Data_Readouts.FileTime) AS FILETIME,
          MAX(db_ddladmin.Data_Readouts.FileName) AS FN,
          db_ddladmin.Data_Vehicles.Name, db_ddladmin.Data_Values.Value
FROM db_ddladmin.Data_Readouts
  INNER JOIN db_ddladmin.Data_Values
      ON db_ddladmin.Data_Readouts.ReadOutID = db_ddladmin.Data_Values.ReadOutID
  INNER JOIN db_ddladmin.Data_Vehicles
      ON db_ddladmin.Data_Readouts.VehicleID = db_ddladmin.Data_Vehicles.ID
GROUP BY db_ddladmin.Data_Values.Identifier, db_ddladmin.Data_Values.ECU,
         db_ddladmin.Data_Vehicles.Name, db_ddladmin.Data_Values.Value
ORDER BY MAX(db_ddladmin.Data_Vehicles.Name)

编辑:数值来自车辆的读数。为什么我需要最新的文件时间是因为我想要最新的读数。readoutid是一个在读出数据时给出的数字。数字越高,读数越晚。fn是文件名,它包含读取时的milage和filetime。

最佳答案

试试这个:

SELECT  ReadOutID,
        Identifier,
        ECU,
        FileTime,
        FileName,
        Name,
        [Value]
FROM (
    SELECT  dr.ReadOutID,
            dv.Identifier,
            dv.ECU,
            dr.FileTime,
            dr.FileName,
            dve.Name,
            dv.[Value],
            DENSE_RANK() OVER (PARTITION BY dve.Name ORDER BY dr.FileTime DESC) as drnk
    FROM db_ddladmin.Data_Readouts dr
    INNER JOIN db_ddladmin.Data_Values dv
        ON dr.ReadOutID = dv.ReadOutID
    INNER JOIN db_ddladmin.Data_Vehicles dve
        ON dr.VehicleID = dve.ID
    ) as rv
WHERE drnk = 1;

关于sql - 在MS SQL Server的VIEW中整理出最新的Filedate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37274005/

10-11 02:07