Last record of Join table

后端 未结 7 970
忘了有多久
忘了有多久 2021-01-06 16:05

I am lookign for the correct SQL code to join 2 tables and show only the last record of the details table.

I have a DB with 2 tables,

Deals 
   Deal         


        
相关标签:
7条回答
  • 2021-01-06 16:36

    Try this..

    SELECT D.*,DC1.Comment 
    FROM Deals AS D
       INNER JOIN DealComments AS DC1
            ON D.DealId = DC1.DealID
        INNER JOIN 
        (
            SELECT 
                DealID,
                MAX(CommentTime) AS CommentTime
            FROM DealComments AS DC2
            GROUP BY DealID
        ) AS DC2
            ON DC2.DealId = DC.DealId
                AND DC2.CommentTime = DC1.CommentTime
    
    0 讨论(0)
  • 2021-01-06 16:37
    select
      d.DealID, dc1.dcID, dc1.Comment, dc1.CommentPerson, dc1.CommentTime
    from
      Deals d
    inner join
      DealComments dc1 on dc1.DealID = d.DealID
    where
      dc1.CommentTime = (select max(dc2.CommentTime) from DealsComments dc2 where dc2.DealId = dc1.DealId)
    
    0 讨论(0)
  • 2021-01-06 16:43

    Try this:

    CREATE VIEW DealsWithLastComment
    AS
       SELECT
           D.*, DC.*
       FROM
           Deals D INNER JOIN DealComments DC
           ON D.DealID = DC.DealID
           GROUP BY D.DealID, DC.CommentTime
           HAVING DC.CommentTime = MAX(DC.CommentTime)
    
    0 讨论(0)
  • 2021-01-06 16:50
    select a.dealid
    , a.dealname
    , a.dealdetails
    , b.dcid
    , b.commenttime
    , b.commentperson
    , b.comment
    from deals a, dealcomments b
    where b.dealid = a.dealid
      and b.commenttime = (select max(x.commenttime)
                           from dealcomments x
                           where x.dealid = b.dealid)
    

    EDIT: I didn't read the initial question close enough and didn't notice that all DEALS rows were needed in the view. Below is my revised answer:

    select a.dealid
    , a.dealname
    , a.dealdetails
    , b.dcid
    , b.commenttime
    , b.commentperson
    , b.comment
    from deals a left outer join (select x.dcid
    , x.dealid
    , x.commenttime
    , x.commentperson
    , x.comment
    from dealcomments x
    where x.commenttime = (select max(x1.commenttime)
                           from dealcomments x1
                           where x1.dealid = x.dealid)) b
    on (a.dealid = b.dealid)
    
    0 讨论(0)
  • 2021-01-06 16:52

    What about this query.

    select * from Deals 
    left join DealComments on Deals.DealID = DealComments.DealID and DealComments.CommentTime = (SELECT CommentTime  FROM DealComments WHERE DealComments.DealID = Deals.DealID ORDER BY CommentTime DESC limit 1)
    
    0 讨论(0)
  • 2021-01-06 16:54

    Not very elegant, but works in Oracle :

    select dealid,
           dealname,
           dealdetails,
           comment,
    from
    (
      select a.dealid,
             a.dealname,
             a.dealdetails,
             b.commenttime,
             b.comment,
             max(commenttime) over (partition by a.dealid) as maxCommentTime
      from deals a inner join dealcomments b on b.dealid = a.dealid
    )
    where comment = maxCommentTime
    
    0 讨论(0)
提交回复
热议问题