sql >> Databáze >  >> RDS >> Oracle

Posouvání určitých záznamů na konec běhu se stejným datem

To je složité. Nejprve musíte najít po sobě jdoucí záznamy data, takže pomocí

thedate     theid  thetype
2014-07-12   5001       59
2014-07-12   5002      101
2014-07-12   5003       88
2014-07-13   5004       10
2014-07-12   5005       60

byste identifikovali 2014-07-12 jako jeden výskyt pro první tři záznamy a další pro poslední záznam. Druhý záznam by musel získat pozici #3 ve vašich výsledcích, ne #5.

Toho dosáhnete tím, že po sobě jdoucím záznamům dáte skupinový klíč pomocí prvního LAG podívat se do předchozího záznamu, čímž vytvoříte příznak změny skupiny a poté tyto příznaky shromáždíte.

select thedate, theid, thetype
from
(
  select 
    thedate, theid, thetype,
    sum(new_group) over (order by theid) as group_key
  from
  (
    select
      thedate, theid, thetype,
      case when lag(thedate) over (order by theid) = thedate then 0 else 1 as new_group
    from mytable
  ) marked
) grouped
order by 
  group_key,
  case when thetype = 101 then 1 else 0 end,
  theid;


  1. Oracle Update Query pomocí Join

  2. Dynamicky přiřaďte alias všem názvům polí v dotazu msyql

  3. Jaký je nejlepší způsob, jak vybrat minimální hodnotu z několika sloupců?

  4. Porovnejte obrázek BLOB s obrázky uloženými jako ORDImage pomocí SQL/MM Still Image