Как я могу оптимизировать запрос даты MAX, относящийся к другой сущности таблицы - PullRequest
1 голос
/ 09 июля 2009

У меня проблемы с попыткой оптимизировать этот запрос с помощью OVER (PARTITION BY ...), поскольку поле id таблицы, содержащей maxDate, должно относиться к другой таблице.

Рабочий запрос:

 SELECT maxReadDate, Equip.idProtocol
      FROM Equip, 
      (  
          SELECT idEquip as idEquipTot, MAX(readDate) AS maxReadDate
          FROM Totalizer
          WHERE Totalizer.idEquip = xxx
          GROUP BY idEquip
      ) 
      WHERE Equip.idEquip = idEquipTot

Я пытаюсь что-то сделать, но это не сработало:

 SELECT maxReadDate, Equip.idProtocol
      FROM Equip, 
      (  
          SELECT idEquip as idEquipTot, MAX(readDate) OVER (PARTITION BY idEquip) maxReadDate
          FROM Totalizer
      ) 
      WHERE Equip.idEquip = idEquipTot
      AND Equip.lastReadDate = maxReadDate
      AND idEquipoTot = xxx

Спасибо.

Решение:

SELECT DISTINCT e.idProtocol, e.idEquip, MAX(t.readDate) 
      OVER (PARTITION BY e.idEquip) maxReadDate
 FROM    Equip e
 JOIN    Totalizer t
 ON      t.idEquip = e.idEquip
 WHERE   e.idEquip = ?

Ответы [ 2 ]

2 голосов
/ 09 июля 2009
SELECT  e.idProtocol, e.idEquip, MAX(t.readDate) OVER (PARTITION BY e.idEquip) maxReadDate
FROM    Equip e
JOIN    Totalizer t
ON      t.idEquip = e.idEquip
0 голосов
/ 05 февраля 2013

вам не нужны аналитические функции, просто используя группировку

SELECT e.idProtocol, e.idEquip, MAX(t.readDate) as maxReadDate
 FROM    Equip e
 JOIN    Totalizer t
 ON      t.idEquip = e.idEquip
 WHERE   e.idEquip = ?
group by e.idProtocol, e.idEquip
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...