2017-02-22 45 views
0

我能够从我需要的数据库中获取数据,除了我只需要每个日期的一行,所以例如在下面的图片应该只有第二行不是第一个。我不知何故需要能够从一个日期为一个用户获得一行。每个用户的选择行与当天的最新时间

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

放入CTE使用ROW_NUMBER在(分区通过任何参考u的使用),并从该CTE其中ROWNUMBER = 1 –

回答

2

使用DISTINCT ON

得到的只是一排为一个用户从一个日期

SELECT DISTINCT ON (id_user, date_created) ... 

要获得最新的该行的时间为一天,加上(在相同的查询级别):

ORDER BY id_user, date_created, time_created DESC NULLS LAST 

详情:

+0

而且我应该在哪里使用它选择?在哪个条款中?我有点迷失在那 – jemcaj

+1

@jemcaj:在开始的'select'右边,就像Erwin显示 –

+0

@jemcaj:你是否按照链接? –

相关问题