ponechani X poslednich objektu per group

瀏覽次數:3 次
跳到第一則未讀訊息

Vladimír Macek

未讀,
2021年2月20日 上午10:59:082021/2/20
收件者:djan...@googlegroups.com
Ahoj,

mějme model s fieldy timestamp (ts) a skupina (grp).

Máte někdo odladěný příkaz (ORM nebo při nejhorším SQL), který smaže
všechny objekty, které jsou pro danou grp starší než 5 nejmladších dle ts?

V Pythonu to samozřejmě umím, ale mohl by to dokázat postgres. :-)

Díky,

V.


Honza Král

未讀,
2021年2月20日 上午11:57:142021/2/20
收件者:djan...@googlegroups.com
Ahoj,

pristupy ktere znam (muze jich byt vic a/nebo existovat lepsi:

1) subselect ktery vrati poradi podle ktereho pak muzes filtrovat:

DELETE
FROM
  my_table x
WHERE (
  SELECT
    COUNT(*)
  FROM
    my_table
  WHERE
    grp = a.grp
  AND
    ts <= a.ts
) <= 5

2) pouziti window functions (https://www.postgresql.org/docs/9.1/tutorial-window.html) uprimne nevim, jak delete, ale u SELECT vypada takhle nejak:

   SELECT * FROM (
        SELECT *, 
        rank() OVER (
            PARTITION BY grp
            ORDER BY ts DESC
        )
        FROM my_table
    ) rank_filter
WHERE RANK > 5

3) me oblibene - nedelej to a delej to pri vkladani zaznamu ktere vzdy budes nasledovat jednoduchym DELETE ktere vymaze jen ty zaznamy pro grp kterou zrovna upravujes.

Snad neco z toho pomuze.


--
--
E-mailová skupina djan...@googlegroups.com
Správa: http://groups.google.cz/group/django-cs
---
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu django-cs+...@googlegroups.com.
Chcete-li zobrazit tuto diskusi na webu, navštivte https://groups.google.com/d/msgid/django-cs/b297f00f-9a6b-8e29-7b3a-2b9305d722a4%40sandbox.cz.

Jan Walter

未讀,
2021年2月20日 下午1:07:362021/2/20
收件者:djan...@googlegroups.com
Ta 1) mi prijde fajn. Jen, pokud se nemylim, mladsi zaznamy maji vetsi ts, cili nerovnosti > a >= (mazu ty, kde mladsich v grp je alespon 5). Alias je a, ne x, snad. Plus to predpoklada unikatnost ts.

回覆所有人
回覆作者
轉寄
0 則新訊息