Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL, aby sprawdzić, kiedy pary nie pasują

Jednym ze sposobów jest użycie exists predykat ze skorelowanym podzapytaniem, które sprawdza, czy dany symbol ma więcej niż jedną cenę.:

select * from table1 t
where exists (
  select 1
  from table1
  where symbol = t.symbol
  and price <> t.price);

Przykładowe skrzypce SQL

To zwróci:

|                   Date | Type |    Symbol |  Price |
|------------------------|------|-----------|--------|
| June, 30 1995 02:00:00 | gaus | 313586U72 | 109.25 |
| June, 30 1995 02:00:00 | gbus | 313586U72 | 108.94 |
| June, 30 1995 02:00:00 | agus |       SRR |  10.25 |
| June, 30 1995 02:00:00 | lcus |       SRR |   0.45 |
| July, 01 1995 02:00:00 | gaus | 313586U72 | 109.25 |
| July, 01 1995 02:00:00 | gbus | 313586U72 | 108.94 |

Edycja:zainspirowana sprytną odpowiedzią Gordona Linoffa, inną opcją może być użycie avg() jako funkcja okienkowa:

select Date, Type, Symbol, Price  
from (
  select Date, Type, Symbol, Price, avg = avg(price) over (partition by symbol) 
  from table1) a
where avg <> price;

Edycja:z zaznaczeniem, aby upewnić się, że zwracane są tylko duplikaty z tego samego dnia:http:// /www.sqlfiddle.com/#!6/29d67/1



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podziel ciąg za pomocą instrukcji select

  2. Co oznacza znak potoku/pionowej kreski w TSQL?

  3. Jak ustawić właściwość SSRS ConsumeContainerWhitespace w programie Visual Studio 2008?

  4. Jak zgłosić błąd z funkcji zdefiniowanej przez użytkownika programu SQL Server

  5. Tworzenie grup kolejnych dni spełniających zadane kryteria