Получить последнее (последнее) отдельное наибольшее значение - PullRequest
2 голосов
/ 04 августа 2009

Я хочу получить самые последние requestid из таблицы tblquoteproposal` для perticular customerId здесь 3, в этом примере ID 2 & ID 4.

таблица запрашиваемый клиент 6 2 7 4 8 3 9 3

Таблица tblquoteproposal

 id requestid QuotePraposalLink comment
 1  6          jgj               mghm   
 2  7         jhgj               hjgj  
 3  8         xyz1              rifsf
*4  8         xyz2              ri2sf*
 5  9         xyz3              ri3sf
*6  9         xyz4              ri4sf*

В этой таблице requestid - внешний ключ. Существует также другая таблица tblrequest, в которой первичный ключ имеет requestid.

Я написал следующий запрос, но он не дает правильных результатов:

SELECT r.RequestId,r.ConsultantId,(SELECT concat(FirstName,' ',LastName) 
                                   FROM tbluser 
                                   WHERE UserId = v_userId) as "Customer",
       r.RequestDate,r.QuoteDetailsFileLink,r.Requestcomment,r.CustomerId,
       qp.QuotePraposalLink,qp.Comment
FROM tblrequest r
LEFT OUTER JOIN tblquoteproposal qp ON r.RequestId=qp.RequestId 
WHERE r.customerid=v_userId 
GROUP BY r.RequestId 
ORDER BY qp.id ;

Ответы [ 3 ]

2 голосов
/ 04 августа 2009

Почему бы не попробовать:

SELECT MAX(id)
FROM tblquoteproposal
GROUP BY requestid

И подать результаты этого запроса на то, что вам нужно? (Это может быть подзапрос).

Например, ваше полное решение может быть следующим (я использую LEFT OUTER JOIN, потому что вы сделали это, я не уверен, что это правильный путь, возможно INNER JOIN больше подходит):

SELECT ... your fields ...
FROM 
    tblquoteproposal p LEFT OUTER JOIN tblrequest r 
        on p.requestid = r.requestid
WHERE p.id IN (
    SELECT MAX(id)
    FROM tblquoteproposal
    GROUP BY requestid )
0 голосов
/ 04 августа 2009

Оптимизированная версия ответа Ракса Олгуда может быть:

SELECT ... your fields ...
FROM 
    tblquoteproposal p LEFT OUTER JOIN tblrequest r 
        ON p.requestid = r.requestid
WHERE p.id = ifnull( (
    SELECT MAX(id)
    FROM tblquoteproposal
    where requestid = r.requestid ), p.id )

Отредактировано, чтобы сделать его внешним соединением.

0 голосов
/ 04 августа 2009
SELECT  *
FROM    (
        SELECT  requestid, MAX(id) AS mid
        FROM    tblquoteproposal
        GROUP BY
                requestid
        ) m
JOIN    tblrequest tr
ON      tr.id = tm.requestid
JOIN    tblquoteproposal tqp
ON      tqp.id = m.mid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...