SQL查询在某些条件下行之间的操作

时间:2015-11-04 11:58:49

标签: mysql postgresql

它有点复杂的查询,因为它包含一些条件。

我有这样的表:

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。

很抱歉很多文字。但有必要让其他人了解所需要的东西。

0 个答案:

没有答案