AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 141413
Accepted
user2676140
user2676140
Asked: 2016-06-17 04:09:13 +0800 CST2016-06-17 04:09:13 +0800 CST 2016-06-17 04:09:13 +0800 CST

Consulta para retornar dados de MAX(ID)

  • 772

Preciso retornar apenas a 1 linha do MAX(ID), mas minha consulta não está retornando isso.

Este é o conjunto de resultados que recebo retornado

id      bbid    indate      st  val
200817  16543   01/01/16    1   65.4
2017    16543   01/01/16    1   36.52
1995    16543   01/01/16    1   18.51
20932   1234    03/01/16    1   55.3
22324   1234    03/01/16    1   16.52
55      8232    05/01/16    2   100

Isso é o que EU QUERO devolvido

id      bbid    indate      st  val
200817  16543   01/01/16    1   65.4
22324   1234    03/01/16    1   16.52
55      8232    05/01/16    2   100

(Apenas uma linha por bbid e, se bbid tiver várias entradas, extraia os dados de MAX(ID))

Aqui está um exemplo de DDL para ajudar a solucionar problemas

Create Table #One
(
  id int
  ,bbid int
  ,val varchar(100)
)

Create Table #Two
(
  bbid int
  ,st int
  ,indate datetime
)

Insert Into #One Values
('200817','16543','65.40')
,('2017','16543','36.52')
,('1995','16543','18.51')
,('20932', '1234', '55.30')
,('22324', '1234', '16.52')
,('55', '8232', '100')

Insert Into #Two Values
('16543', '1', '2016-01-01')
,('1234', '1', '2016-03-01')
,('8232','2', '2016-05-01')

E esta é a consulta que escrevi que produziu os resultados incorretos...

Select 
t1.id
,t3.bbid
,t3.indate
,t3.st
,t1.val
FROM #One t1
JOIN 
(
    Select
    id
    ,MAX(ID) As "Maxid"
    FROM #One
    GROUP BY ID
 ) t2
ON t1.id=t2.Maxid
INNER JOIN #Two t3
ON t1.bbid = t3.bbid

Como essa consulta deve ser alterada para retornar meu conjunto de resultados desejado?

sql-server t-sql
  • 5 5 respostas
  • 9809 Views

5 respostas

  • Voted
  1. Best Answer
    byrdzeye
    2016-06-17T05:06:16+08:002016-06-17T05:06:16+08:00

    Você pode usar uma expressão de tabela comum (cte).

    ;with cte as (
    select
         row_number() over(partition by bbid order by #one.id desc) as rn ,id from #one
    )
    select 
        t1.id
        ,t3.bbid
        ,t3.indate
        ,t3.st
        ,t1.val
    from
        #One as t1
    join #Two as t3
        on t1.bbid = t3.bbid
    join cte
        on cte.id = t1.id
        and cte.rn = 1
    order by t1.id desc
    
    • 2
  2. Dinesh Rajan
    2019-03-12T05:56:49+08:002019-03-12T05:56:49+08:00

    Mantendo as coisas simples

    select * from mytable where id = (select max(id) from mytable)
    
    • 2
  3. paparazzo
    2016-06-17T05:06:45+08:002016-06-17T05:06:45+08:00
    select * 
    from 
    (  select t1.id
            , t3.bbid
            , t3.indate
            , t3.st
            , t1.val
            , row_number() over (partition by bbid order by id desc) as rn 
       FROM #One t1
       INNER JOIN #Two t3
       ON t1.bbid = t3.bbid
    )  tt
    where tt.rn = 1
    

    ou apenas coloque isso em sua consulta como t2

    Select MAX(ID) As "Maxid" 
    FROM #One 
    GROUP BY bbid
    
    • 1
  4. Anthony Genovese
    2016-06-17T06:26:41+08:002016-06-17T06:26:41+08:00

    Aqui está!

    select t1.id, t1.mmbid, t3.indate, t3.st, t1.val from #one t1
    (select bbid, MAX(id) mbbid from #one ) t2
    on t1.id=t2.id and t1.bbid=t2.mbbid
    join #two t3 
    on t1.mbbid=t3.bbid
    
    • 0
  5. datagod
    2016-06-17T08:32:03+08:002016-06-17T08:32:03+08:00

    Este usa um CTE, mas não depende de row_number (apenas no caso de você achar a sintaxe muito complicada)

    with MaxIDs as
    (
     select max(id) as 'MaxID',
            bbid
       from #One
      group by bbid
    )
    select o.id, o.bbid, t.indate, t.st, o.val 
      from MaxIDs m
      join #Two   t on m.bbid = t.bbid
      join #One   o on o.id = m.maxid     
    order by 1 desc
    
    • 0

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve