2017-02-22 84 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:你是否按照鏈接? –

相關問題