Можно ли преобразовать этот запрос, чтобы использовать объединение вместо подзапроса? - PullRequest
1 голос
/ 09 апреля 2009
SELECT
    number, count(id)
FROM
    tracking
WHERE
    id IN (SELECT max(id) FROM tracking WHERE splitnr = 'a11' AND number >0 AND timestamp >= '2009-04-08 00:00:00' AND timestamp <= '2009-04-08 12:55:57' GROUP BY ident)
GROUP BY
    number

Ответы [ 3 ]

1 голос
/ 09 апреля 2009

Как насчет этого:

SELECT    number, count(id)
FROM    tracking 
  INNER JOIN (SELECT max(id) ID FROM tracking  
                 WHERE splitnr = 'a11' AND 
                       number >0 AND timestamp >= '2009-04-08 00:00:00' AND 
                       timestamp <= '2009-04-08 12:55:57'
              GROUP BY ident
             ) MID ON (MID.ID=tracking.id)
WHERE   
GROUP BY number
0 голосов
/ 09 апреля 2009

Не могли бы вы сделать что-то вроде:

SELECT
    number,
    count(id)
FROM
    tracking
WHERE
    splitnr = 'a11' AND number > 0 AND timestamp >= '2009-04-08 00:00:00' AND timestamp <= '2009-04-08 12:55:57'
GROUP BY
    number
ORDER BY
    number DESC
LIMIT 0,1

(кстати, я не знаю MySQL)

Я предполагаю, что это вернет вам тот же набор результатов, вы упорядочите его по номеру desc, потому что вам нужен максимальный, верно? Затем вы можете вставить предложение WHERE и ограничить его одним, чтобы дать вам первое, которое по сути совпадает с MAX (я думаю) Таким образом, удалив JOIN в целом.

РЕДАКТИРОВАТЬ : Я не думал, что вам понадобится идентификатор GROUP BY либо

0 голосов
/ 09 апреля 2009

Немного трудно убедиться, что я все понял правильно, не видя данных и не зная точно, чего вы пытаетесь достичь, но лично я бы превратил подзапрос в представление, а затем включил бы его, :

create view vMaximumIDbyIdent

as

SELECT ident, max(id) maxid

FROM tracking 

WHERE splitnr = 'a11' AND number >0 

AND timestamp >= '2009-04-08 00:00:00' 

AND timestamp <= '2009-04-08 12:55:57' 

GROUP BY ident

then:


SELECT

    number, count(id)
FROM

    tracking,

    vMaximumIDbyIdent

WHERE

    tracking.id = vMaximumIDbyIdent.maxid

GROUP BY

    number

Более читабельно и легко обслуживаемо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...