sql - 每个用户选择当天最晚时间的行

标签 sql postgresql greatest-n-per-group

<分区>

我能够从我需要的数据库中获取数据,除了每个日期我只想要一行,所以例如在下图中应该只有第二行而不是第一行。我不知何故需要能够从一个日期为一个用户获取一行。

SELECT id_user, date_created || ' ' || time_created as placed
            FROM (
                        SELECT
                        b_objednavky.uzivatel AS id_uzivatele,
                        b_objednavky.vytvoreno::date AS date_created,
                        to_char(b_objednavky.vytvoreno, 'HH24:MI:SS') as time_created,
                        b_objednavky.created

                    FROM b_objednavky
                    INNER JOIN u_uzivatele ON b_objednavky.uzivatel = (
                     SELECT u_uzivatele.id from u_uzivatele JOIN bw_paid_orders
                           ON u_uzivatele.id = bw_paid_orders.user_id 
                     WHERE bw_paid_orders.active_thru < NOW() + interval '6 months'
                     ) uzivatele
                    INNER JOIN bc_stavy_objednavky ON b_objednavky.stav = bc_stavy_objednavky.id

                    WHERE bc_stavy_objednavky.sysid = 'nova' AND b_objednavky.vytvoreno <= NOW()
                    AND bc_staty.kod NOT IN (
                      'BR', 'CL', 'AR', 'MX'
                    )

                ) AS order
                 LEFT OUTER JOIN (
                  SELECT user_id, max(paid) as last_paid FROM bw_paid_orders
                GROUP BY user_id
                ) last_paid_by_user ON (id_user = user_id) 
                WHERE (created > last_paid OR last_paid IS NULL) AND created BETWEEN ('2017-02' || '-01')::date
            AND ('2017-02' || '-01')::DATE + '1 month'::interval 
            ORDER BY datum_objednani DESC, objednavajici, nazev, duration

最佳答案

使用 DISTINCT ON

to get just one row for one user from one date

SELECT DISTINCT ON (id_user, date_created) ...

要获取当天最晚时间的行,添加(在同一查询级别):

ORDER BY id_user, date_created, time_created DESC NULLS LAST

详细信息:

关于sql - 每个用户选择当天最晚时间的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42396204/

相关文章:

mysql - SQL 查询将结果分组到每小时的存储桶中

php - 重置学说 2 ID

postgresql - 在 Postgres 中,当表 A 中的一行被删除时,如何从表 B 中删除一行?

sql - 左外连接仅第一行

SQL Server 选择行

sql - 使用函数匹配字符串

sql - 如何创建一个插入但随后返回插入数据的事务

SQL:如何仅获取每个用户的第一个用户操作

mysql - 从连接表中选择 rev_parent_id=0 的第一个条目

mysql - 未使用 mysql 注释(<- 未声明)