sql >> Databáze >  >> RDS >> Sqlserver

SQL pro kontrolu, když se páry neshodují

Jedním ze způsobů je použití exists predikát s korelovaným poddotazem, který kontroluje, že specifický symbol má více než jednu cenu.:

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

Ukázka SQL Fiddle

Toto by se vrátilo:

|                   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 |

Edit:inspirováno chytrou odpovědí Gordona Linoffa, další možností by mohlo být použití avg() jako funkce v okně:

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

Upravit:se zaškrtnutím, abyste zajistili, že budou vráceny pouze duplikáty ke stejnému datu:http:/ /www.sqlfiddle.com/#!6/29d67/1



  1. Mohu spustit smyčku v MySQL bez použití procedury/funkce?

  2. Železniční transakce

  3. Jak odstranit řadu záznamů najednou na MySQL?

  4. Transakce MySQL a souběžné vkládání