Domanda

quello che mi serve per testare sul mio tavolo è se ci sono le righe per un dato user id e ID ordine in due giorni separati (campo datetime per un timestamp).

Sono abbastanza sicuro che avrei bisogno di una clausola having ed è per questo che sono qui ... che mi spaventa terribilmente.

È stato utile?

Soluzione

Avere non dovrebbe spaventare voi, è solo un "Dove" su un campo aggregata:

Select UserID, Count(*) From OrderTbl Group By UserID Having Count(*) > 1

Che ti do tutti gli utenti che hanno più ordini.

Select UserID, Count(*) From OrderTbl Where (UserID=@UserID) Group By UserID Having Count(*) > 1 

vi darà il conteggio se ci sono più record per l'ID utente in @UserID e nulla in caso contrario.

if exists (Select UserID, Count(*) From OrderTbl Where (UserID=@UserID) Group By UserID 
             Having Count(*) > 1) Select 1 else Select 0

restituirà un 1 se non ci sono più record per l'utente, 0 in caso contrario.

Aggiornamento: non si rese conto che si potrebbe avere più ordini al giorno. Questa query fare quello che vuoi:

With DistinctDates as (Select Distinct UserID, [DATE] From OrderTbl Where (UserID=@UserID))
Select UserID, Count(*) From DistinctDates  
Group By UserID Having Count(*) > 1 

Altri suggerimenti

Non so se ho capito la tua domanda, ma questo può funzionare per voi. Il avendo è tuo amico e si può ancora utilizzare la clausola WHERE. Questo dovrebbe farvi sapere che ordine e user id combo si sta verificando più di una volta nella tabella.

SELECT [UserId], [OrderId]
FROM OrderTable 
WHERE UserId = @UserId
AND OrderId = @OrderId
GROUP BY UserId, OrderId
HAVING Count(*) > 1
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top