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 / user-162593

Jefferson's questions

Martin Hope
Jefferson
Asked: 2025-01-30 21:22:07 +0800 CST

Procedimento armazenado para obter o startDate máximo com AgentId opcional

  • 8

Tenho esse procedimento armazenado que quero a base max startDate no AgentId ou sem o AgentId. A maneira como estou fazendo isso é usando um if else e queria ver se havia uma maneira melhor de fazer isso?

  IF (@AgentId = 0)
      BEGIN
          SELECT top (1)max(cgv.StartDate) as AgentLatestPublishedDate,ag.Name
          FROM compendia.Agent ag
          JOIN compendia.DrugCompendium AS dc ON dc.AgentId = ag.OriginalAgentId 
          JOIN compendia.CompendiaGuidelineVersion cgv ON cgv.CompendiaGuidelineVersionId = dc.CompendiaGuidelineVersionId
          JOIN guideline.Disease AS d ON d.DiseaseId = dc.DiseaseId
          WHERE cgv.WorkFlowStatusId = 6 AND ag.EndDate IS NULL AND dc.IsNoLongerRecommended = 0
          group by ag.AgentId,ag.Name
      end

    ELSE
    BEGIN
          SELECT max(cgv.StartDate) as AgentLatestPublishedDate,ag.Name
          FROM compendia.Agent ag
          JOIN compendia.DrugCompendium AS dc ON dc.AgentId = ag.OriginalAgentId 
          JOIN compendia.CompendiaGuidelineVersion cgv ON cgv.CompendiaGuidelineVersionId = dc.CompendiaGuidelineVersionId
          JOIN guideline.Disease AS d ON d.DiseaseId = dc.DiseaseId
          WHERE cgv.WorkFlowStatusId = 6 AND ag.EndDate IS NULL AND dc.IsNoLongerRecommended = 0 and ag.AgentId = @AgentId
          group by ag.AgentId,ag.Name
    end
sql-server
  • 3 respostas
  • 209 Views
Martin Hope
Jefferson
Asked: 2024-10-26 01:12:22 +0800 CST

Tabelas temporárias simplificam consultas

  • 8

Estou tentando acessar a tabela Customer a partir dos dados na tabela SiteConfiguration.

Estou pegando os dados e configurando-os para @AdditionalVoteViewers, que seria uma sequência de endereços de e-mail. Então, divido a sequência e insiro os resultados em uma tabela temporária.

Nesse ponto, unirei a tabela temporária com a tabela Cliente para retornar o CustomerId .

Só quero ver se há uma maneira melhor de fazer isso.

Dados na tabela SiteConfiguration

[email protected];[email protected]

Dados na tabela Cliente

[email protected] 1
[email protected] 2

Código:

declare @AdditionalVoteViewers VARCHAR(100) 
Select @AdditionalVoteViewers = 
(
    SELECT [Value] FROM [SiteConfiguration] 
    where Name = 'AdditionalVoteViewers'
)
print @AdditionalVoteViewers
--CREATE TABLE #TempAdditionalVoteViewers(email  varchar(MAX) )

select * into #TempAdditionalVoteViewers 
from [dbo].[Split] (@AdditionalVoteViewers,';')
--select * from #TempAdditionalVoteViewers

select [CustomerId] into #TempAdditionalVoteViewersId
from [dbo].[Customer] c 
join #TempAdditionalVoteViewers t on c.Email = t.val


select * from #TempAdditionalVoteViewersId
sql-server
  • 2 respostas
  • 92 Views
Martin Hope
Jefferson
Asked: 2023-10-28 03:10:57 +0800 CST

consultar mau desempenho

  • 5

Há algo que eu possa fazer para melhorar o desempenho dessa consulta? Incluí o plano de execução e a saída do Server Profiler. Existe um índice que pode ajudar? Vejo que há uma busca de índice que está demorando algum tempo. Posso fazer alguma coisa para ajudar nisso? no perfil do servidor vejo que as leituras parecem altas, pode haver algo para ajudar nisso?

SELECT dbo.Templates.VersionKey
FROM            dbo.Templates INNER JOIN
                         dbo.Indications ON dbo.Templates.Id = dbo.Indications.TemplateId INNER JOIN
                         dbo.Sentences ON dbo.Indications.SentenceId = dbo.Sentences.Id INNER JOIN
                         dbo.SentenceParts ON dbo.Sentences.Id = dbo.SentenceParts.SentenceId INNER JOIN
                         dbo.SentencePartValues ON dbo.SentenceParts.Id = dbo.SentencePartValues.SentencePartId
WHERE        (dbo.Templates.Status <> 8) AND 
(dbo.Templates.IsCurrentVersion = 1) AND 
(dbo.Indications.IsActive = 1) AND 
(dbo.Indications.IsCurrentVersion = 1)  
AND (NOT (Sentences.[IsDeleted] = 1)) 
AND (NOT (SentenceParts.[IsDeleted] = 1)) 
AND (NOT (SentencePartValues.[IsDeleted] = 1)) 
and
(SUBSTRING(dbo.SentencePartValues.LiteralValue, 12, 36) = 'a2278339-8add-ff3d-8baa-9654b8b8d00b')

plano de execução https://www.brentozar.com/pastetheplan/?id=By68aKtfp

Perfilador do SQL Server insira a descrição da imagem aqui

sql-server
  • 1 respostas
  • 118 Views
Martin Hope
Jefferson
Asked: 2022-09-09 06:14:18 +0800 CST

Compare duas tabelas e atualize com endDate

  • 2

Eu tenho duas tabelas CustomerProfile e NewData. O CustomerProfile tem CustomerId,ProfileId,startDate e endDate. A tabela NewData é um novo dado que está chegando apenas com o ProfileId. Crio uma tabela temporária com ids de ambas as tabelas denominadas #groupedProfileIds. Em seguida, faço um loop na tabela temporária, verificando se o id está em alguma da tabela principal. Então base a contagem que eu faço um insert ou update. Eu tentei fazer isso com while e verificando a contagem de ambas as tabelas, mas queria ver se existe uma maneira melhor.

O objetivo disso é ter uma base de tabela CustomerProfile atualizada na tabela newData. Se o id não estiver na tabela newData, a tabela CustomerProfile será atualizada com uma data de término. Se forem novos Id serão inseridos com uma data de início. Eu uso ' @OldProfileId = 1 e @NewProfileId = 0' para fazer a atualização porque os dados não estão na nova tabela. Para a inserção eu faço ' @OldProfileId = 0 e @NewProfileId = 1' porque os dados estão apenas no newData. Eu não preciso marcar 1 porque eles estariam nas duas tabelas.

http://sqlfiddle.com/#!18/73845

            select * INTO #groupedProfileIds from(
            SELECT ProfileId FROM CustomerProfile
                UNION 
                SELECT ProfileId FROM NewData)  as #tmp

            declare @Rowcount int 
            select @Rowcount=count(*) from #groupedProfileIds
            while( @Rowcount>0)
            begin 
             select @Rowcount=@Rowcount-1;
             DECLARE @ProfileIds int
             set @ProfileIds = (SELECT Id FROM #groupedProfileIds order by Id desc OFFSET @Rowcount ROWS FETCH NEXT 1 ROWS ONLY);
             print @ProfileIds

             DECLARE @OldProfileId INT 
             SET @OldProfileId = (SELECT Count(ProfileId) FROM CustomerProfile where ProfileId = @ProfileIds)

             DECLARE @NewProfileId INT
             SET @NewProfileId = (SELECT Count(ProfileId) FROM #NewData where ProfileId = @ProfileIds)

             IF @OldProfileId = 1 and @NewProfileId = 0
             BEGIN
                update DBO.CustomerProfile set endDate = GETDATE() where ProfileId = @ProfileIds 

             end

             IF @OldProfileId = 0 and @NewProfileId = 1
             BEGIN
                INSERT INTO DBO. CustomerProfile (CustomerId, ProfileId,startDate)
                VALUES (CustomerId,@ProfileIds,GETDATE())
             end
sql-server sql-server-2016
  • 2 respostas
  • 147 Views
Martin Hope
Jefferson
Asked: 2020-06-18 05:22:03 +0800 CST

instrução de caso de procedimento armazenado

  • 0

Estou construindo essa condição where concatenando a variável @whereClause no meu procedimento armazenado. Neste ponto, estou usando o caso para adicionar valores adicionais. se existe uma maneira melhor de fazer isso?

SET @whereClause  = 
    ( CASE  
        -- APPType Clinical
         WHEN (@ApplicationType = 'Clinical') THEN @whereClause + ' AND vpgl.AppType = Clinical'
         -- APPType Patients
         WHEN (@ApplicationType = 'Patients') THEN @whereClause + ' AND vpgl.AppType = Patients'
          -- APPType Web
         WHEN (@ApplicationType = 'Web') THEN @whereClause + ' AND vpgl.AppType = null'
         ELSE @whereClause
       END  
    ) 
sql-server sql-server-2016
  • 2 respostas
  • 327 Views
Martin Hope
Jefferson
Asked: 2020-01-10 10:54:05 +0800 CST

Método preferido de conversão de data e hora

  • 2

Qual seria o método preferido para velocidade e menos estresse no banco de dados usando um entre ou menor que?

SELECT LogId
FROM [Master].[dbo].log mlog
WHERE cast(LogDate as Date) BETWEEN '2019-01-01' AND '2019-12-31'

Ou seria melhor fazer isso?

SET @StartLogId = (SELECT TOP 1 LogID
FROM [Master].[dbo].log mlog
WHERE LogDate >= '2019-01-01T00:00:00.000')

SET @EndLogId = (SELECT TOP 1 LogID
FROM [Master].[dbo].log mlog
WHERE LogDate < '2019-12-31T00:00:00.000'
ORDER BY LogDate DESC);

SELECT LogId
FROM [Master].[dbo].log mlog
WHERE mlog.LogId >= @StartLogId
    AND mlog.LogId <= @EndLogId;
```
sql-server sql-server-2012
  • 1 respostas
  • 107 Views

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