代码之家  ›  专栏  ›  技术社区  ›  user1147188

在SQL中获取表中每行的最大日期

  •  0
  • user1147188  · 技术社区  · 7 年前

    我编辑了我的答案,所以我的问题的解决方案是:

    select  DISTINCT e.Cod_proiect
         , p.Descriere
         , p.Stare
         , p.ClientService
         , e.Data
      from ExpPoz as e 
      join Proiecte as p 
        on e.Cod_proiect=p.Cod_proiect 
                 join ( 
                         select cod_proiect, max(data) maxDt 
                         from ExpPoz
                         group by cod_proiect 
                      ) latest on latest.cod_proiect = e.cod_proiect and latest.maxDt = e.Data and p.Stare='I'
    

    这将导致以下错误:子查询返回的值超过1 我正在努力获得每一行的最长日期。

    我有以下表格结构:

    a    date1
    a    date2
    a    date3
    b    date4
    b    date5
    

    假设date3和date5是最早/最大的,则输出应为:

    a   date3
    b   date5
    

    提前谢谢。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Rigerta    7 年前

    这应该可以做到:

    select  e.Cod_proiect
          , p.Descriere
          , p.Stare
          , p.ClientService
    from ExpPoz as e join Proiecte as p on e.Cod_proiect=p.Cod_proiect 
                     join ( 
                             select cod_proiect, max(data) maxDt 
                             from ExpPoz
                             group by cod_proiect 
                          ) latest on latest.cod_proiect = e.cod_proiect and latest.maxDt = e.Data
    where p.Stare='I'
    

    请注意,您编写 joins 非常古老,如果你用现代的 join 风格 在这个查询中,我选择了您需要的所有内容,并使用每个 cod_proiect .

        2
  •  0
  •   Robert Kock    7 年前

    您可以尝试以下操作:

    SELECT cod_proiect,
           MAX(data)
    FROM
    (
      SELECT DISTINCT
             ep.cod_proiect,
             ep.data
      FROM   ExpPoz   ep
      JOIN   Proiecte pr
        ON   ep.cod_proiect = pr.cod_proiect
       AND   pr.stare = 'I'
    )
    GROUP BY cod_proiect;