sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man hittar N på varandra följande poster i en tabell med SQL

Du måste matcha ditt bord mot sig själv, som om det fanns 2 bord. Så du använder två alias, o1 och o2 för att referera till din tabell:

SELECT DISTINCT o1.customer, o1.product, o1.datum, o1.sale
  FROM one o1, one o2
  WHERE (o1.datum = o2.datum-1 OR o1.datum = o2.datum +1)
  AND o1.sale = 'NO' 
  AND o2.sale = 'NO'; 
 customer | product |   datum    | sale 
----------+---------+------------+------
 X        | A       | 2010-01-03 | NO
 X        | A       | 2010-01-04 | NO
 X        | A       | 2010-01-06 | NO
 X        | A       | 2010-01-07 | NO
 X        | A       | 2010-01-08 | NO

Observera att jag utförde frågan på en postgresql-databas - kanske syntaxen skiljer sig på ms-sql-server, kanske vid aliaset 'FROM one AS o1' kanske, och du kanske inte kan lägga till/subtrahera på det sättet.



  1. Infogar json-kodad data i mysql

  2. Ta bort join från två tabeller

  3. Kontrollera förekomsten av varje tecken i en sträng med en annan sträng i SQL

  4. Postgres JOIN med unnest