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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top