sql >> Databáze >  >> RDS >> Mysql

Medián počtu seskupený podle dne

Doufám, že jsem se neztratil a nezkomplikoval věci, ale přišel jsem na toto:

SELECT sq.created_at, avg(sq.price) as median_val FROM (
SELECT t1.row_number, t1.price, t1.created_at FROM(
SELECT IF(@prev!=d.created_at, @rownum:=1, @rownum:[email protected]+1) as `row_number`, d.price, @prev:=d.created_at AS created_at
FROM mediana d, (SELECT @rownum:=0, @prev:=NULL) r
ORDER BY created_at, price
) as t1 INNER JOIN  
(
  SELECT count(*) as total_rows, created_at 
  FROM mediana d
  GROUP BY created_at
) as t2
ON t1.created_at = t2.created_at
WHERE 1=1
AND t1.row_number>=t2.total_rows/2 and t1.row_number<=t2.total_rows/2+1
)sq
group by sq.created_at

Co jsem zde udělal, je hlavně resetovat číslo řádku na 1, když se datum změní (je důležité objednávat podle created_at) a zahrnout datum, abychom podle něj mohli seskupit. Do dotazu, který počítá celkový počet řádků, jsem zahrnul také created_at, abychom mohli spojit dva dílčí dotazy.



  1. Jak mohu zavolat funkci mysql (jako mysql_insert_id) z Perlu, pokud používám DBI/DBD?

  2. Seznam prvků číselného formátu v Oracle

  3. Nastavit pole pro automatické vkládání časového razítka při AKTUALIZACI?

  4. Jak opravit chybu „funkce datediff vedla k přetečení“ na serveru SQL Server