它有点复杂的查询,因为它包含一些条件。
我有这样的表:
table DC - which contains one row for one northing-easting pair
Columns - Id Northing Easting
PossibleValues - Guid Std value Std value
table DCR - which contains multiple rows for each row in DC. Each row here corresponds to data on each pass on that exact location.
Columns - Id VibStatus DrivingDir CompactionValue UtcDate
PossibleValues - Guid 0/1 Forward/Reverse/Neutral +ve integers Timestamp
table DCMappings - which contains mapping between both tables.
DCId DCRId
我需要的输出应该包含这样的字段:
ResultTable
DCId DCRId Northing Easting VibStatus DrivingDir CompValue Position CompProgress
这里,按照按DC.Id分组的UtcDate排序时,Position是按时间顺序排列的位置(请参阅最后的查询以了解更多信息)。
CompProgress有一些条件让它变得复杂。
CompProgress是CompValue与上一行相比的增加/减少百分比,当按照UtcDate(按时间顺序)的ASC顺序排列时,它在同一行驶方向上,此处要考虑的行应该只是VibStatus设置为ON的行( 1)按DCId的分组。
DC中的每一行在DCR中都有多行。因此,如果DC中的行1在DCR中有10行,则CompProgress应该仅考虑这10行进行计算,然后再考虑DC中的行2等等。
除了计算CompProgress之外,我已经编写了以下查询来提取所需的字段。请帮助我。
SELECT DC.Id, DCR.Id, Northing, Easting, VibStatus, DrivingDir, CompValue, ROW_NUMBER() OVER (PARTITION By dcm."DCId" ORDER BY dcr."UtcDate") as passNo
FROM "DCR" dcr LEFT JOIN "DCMappings" dcm ON "Id" = dcm."DCRId"
LEFT JOIN "DC" dc ON dc."Id" = dcm."DCId"
需要在此查询中评估CompProgress。
很抱歉很多文字。但有必要让其他人了解所需要的东西。