SPROC T-SQL Sintaxe para retornar resultados se existem filas em vários dias
-
18-09-2019 - |
Pergunta
o que eu preciso para testar na minha mesa é se há linhas para um determinado ID de usuário e ID de ordem em dois dias separados (campo DATETIME para um timestamp).
Eu tenho certeza que eu precisaria de um ter cláusula e é por isso que eu estou aqui ... que me assusta terrivelmente.
Solução
Tendo não deve assustá-lo, ele é apenas um "Onde" em um campo de agregados:
Select UserID, Count(*) From OrderTbl Group By UserID Having Count(*) > 1
Isso vai dar-lhe todos os usuários que têm várias ordens.
Select UserID, Count(*) From OrderTbl Where (UserID=@UserID) Group By UserID Having Count(*) > 1
lhe dará a contagem se houver vários registros para o ID de usuário na @UserID e nulo se não.
if exists (Select UserID, Count(*) From OrderTbl Where (UserID=@UserID) Group By UserID
Having Count(*) > 1) Select 1 else Select 0
retornará 1 se existem vários registros para o usuário, 0 se não.
Update: não sabia que você poderia ter vários pedidos por dia. Esta consulta irá fazer o que quiser:
With DistinctDates as (Select Distinct UserID, [DATE] From OrderTbl Where (UserID=@UserID))
Select UserID, Count(*) From DistinctDates
Group By UserID Having Count(*) > 1
Outras dicas
Eu não tenho certeza se eu entendi sua pergunta, mas isso pode funcionar para você. O TER é seu amigo e você ainda pode usar a cláusula WHERE. Isto deve deixá-lo saber que ordem e user id combinação está ocorrendo mais de uma vez na tabela.
SELECT [UserId], [OrderId]
FROM OrderTable
WHERE UserId = @UserId
AND OrderId = @OrderId
GROUP BY UserId, OrderId
HAVING Count(*) > 1