我有一张桌子

Id   status

1   Online

2   Offline

3   Offline


我还有一个单独的表格,可以在其中找到正常运行时间和停机时间的总小时数/日期。

总时间

Id  up  down

1   10   14

2   20   4

3   15   9

1   5    19

2   4    20

3  10    14


我想显示终端ID,状态和总计运行时间和停机时间(1 = 15(up),2 = 24(up),3 = 25(up)。我正在使用内部联接,但我不知道如何将能够获得正常运行时间和停机时间的总和。

SELECT terminal.Id, terminal.status, total_time.Id, SUM(total_time.up),SUM(total_time.down)
FROM terminal
INNER JOIN total_time
ON terminal.Id = total_time.Id
WHERE terminal.Id = total_time.Id

最佳答案

这样的事情应该可以解决问题。我将您的问题解释为仅询问当前状态的时间总和。如果这不是您想要的(也许您想要两者的总和),请告诉我。

SELECT t.id, t.status, IF(t.status = 'Online', ttlTime.upTime, ttlTime.downTime) as totalTime
FROM terminal t
    JOIN
        (SELECT tt.id, SUM(tt.up) as upTime, SUM(tt.down) AS downTime
        FROM total_time tt
        GROUP BY tt.id) ttlTime ON t.id = ttlTime.id


请参见SQLFiddle

10-07 19:45
查看更多