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 / 133075
Accepted
obautista
obautista
Asked: 2016-03-23 17:54:44 +0800 CST2016-03-23 17:54:44 +0800 CST 2016-03-23 17:54:44 +0800 CST

Comparar registros anteriores com o registro mais recente

  • 772

É possível estruturar uma única consulta que retornaria 0 ou 1 (verdadeiro/falso) comparando o primeiro registro com os registros anteriores?

Exemplos de registros na tabela:

ProductID    SampleDate    RunFailure    LevelCode
101          20160322      0             2
101          20160321      0             3
101          20160320      1             2
101          20160318      1             2
102          20160317      0             3
102          20160316      0             2
102          20160315      0             1
103          20160314      1             1
103          20160313      0             2
103          20160312      1             3

Preciso avaliar o registro mais recente por ProductID. No exemplo acima, o último registro (em 20160322) tem um LevelCode de 2. Ele precisa ser comparado ao registro em 20160320 porque é o último registro que falhou com o mesmo LevelCode (portanto, ignoraria o registro em 20160318 porque é mais antigo que o registro do dia 20), portanto, neste caso a consulta retornaria 1 (ou verdadeiro).

Para ProductID 102, a consulta retornaria 0 (ou falso) porque o LevelCode em 20160317 é 3 e não há um registro mais antigo que falhou com o mesmo LevelCode.

ProductID 103 retornaria um 0 (falso) porque em 20160314 o LevelCode é 1 e o último registro para esse ProductID que falhou foi em 20160312 foi para LevelCode3

Idealmente, a consulta retornaria algo como isto:

ProductID    IsMostCurrentRunSameLevelAsLastFailedRun
101          1
102          0
103          0
sql-server sql-server-2014
  • 1 1 respostas
  • 189 Views

1 respostas

  • Voted
  1. Best Answer
    Toby
    2016-03-23T19:40:44+08:002016-03-23T19:40:44+08:00

    Uma maneira seria usando CROSS APPLY.

    Se você identificar o registro mais recente para cada produto na primeira tabela e passar os critérios para a aplicação cruzada.

    SELECT 
          ProductId
       ,  MAX(CASE WHEN t1.RunFailure = t2.RunFailure THEN 1 ELSE 0 END) AS IsMostCurrentRunSameLevelAsLastFailedRun
       FROM <SomeTable> t1
       CROSS APPLY (
          SELECT TOP 1
             RunFailure
             FROM <SomeTable> st
             WHERE st.ProductId = t1.ProductId
             AND   st.LevelCode = t1.LevelCode
             AND   st.SampleDate < t1.SampleDate
             ORDER BY st.SampleDate) AS t2
       GROUP BY t1.ProductId
    

    Como alternativa, examine as funções de janelamento. Você pode fazer muito com eles que pode ser mais eficiente.

    • 1

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