2012-02-28 29 views
1

我很難從表格中獲取正確的行。 我試圖通過查找電子郵件來獲取一些行,並且我想獲取發送給他們的最後一封電子郵件。 我的查詢是:如何獲得每行一次顯示電子郵件的表格的表格

select * 
from persons p2, (
SELECT p.id,p.name,p.email 
FROM persons p, emails e 
WHERE p.id = e.person_id 
) a 
where a.email = p2.email 

該查詢返回所有發送到個人電子郵件的列表。

有人可以幫助我這個查詢,查詢需要返回帶有電子郵件的人員列表,但每個電子郵件需要出現一次。

感謝

+2

你如何確定哪個郵件是最後一個? – 2012-02-28 09:49:45

+0

發送最後一封電子郵件 – Ofer 2012-02-28 09:54:59

+0

好的,根據您確定它是最後一封電子郵件是什麼? – 2012-02-28 09:57:19

回答

2

試試這個變種:

select p.*, tmp.email 
    from persons p, (select person_id, email 
        from emails e1 
        where not exists (
          select 1 
          from emails e2 
          where e1.person_id = e2.person_id 
          and e1.time_sent < e2.time_sent)) tmp 
where p.id = tmp.person_id; 
0

如果DBMS支持熱膨脹係數,你可以做這樣的事情:

;WITH CTE 
AS 
(
SELECT 
    RANK() OVER(PARTITION BY person_id ORDER BY time_sent DESC) AS iRank, 
    e.email, 
    e.person_id 
FROM 
    email AS e 
) 
SELECT 
    * 
FROM 
    persons AS p 
    LEFT JOIN CTE 
     ON p.id=CTE.person_id 
     AND CTE.iRank=1 
0

這個怎麼樣?

select * 
from persons, (SELECT p.id, m.mail, max(m.time_sent) 
       from persons as p, emails as m 
       where m.mail = p.mail 
       GROUP BY p.id, m.mail) as a 
where persons.id = a.id 
相關問題