Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres连接和独立查询_Postgresql - Fatal编程技术网

Postgresql Postgres连接和独立查询

Postgresql Postgres连接和独立查询,postgresql,Postgresql,我有两个标签 user id | name ------------- 1 | User1 | 2 | User2 | 3 | User3 | 4 | User4 | 用户可以随时更改名称。 还有一张桌子 order id |user_name | user_id | price | order_date ------------------------------------------

我有两个标签

   user
    id |  name   
    -------------
    1  |  User1 | 
    2  |  User2 |
    3  |  User3 |
    4  |  User4 |
用户可以随时更改名称。 还有一张桌子

   order
    id |user_name | user_id | price | order_date  
    ---------------------------------------------
    1  |  OldUser3| 3       |  5    | 2017-07-12 08:01:00.000000
    2  |  NewUser3| 3       |  6    | 2017-07-12 09:01:00.000000
    3  |  User1   | 1       |  8    | 2017-07-12 10:01:00.000000
    4  |  NewUser |         |  10   | 2017-07-12 11:01:00.000000
    5  |  NewUser |         |  100  | 2017-07-12 12:01:00.000000
用户名是在下订单时从tabel user复制的,如果用户多次更改名称,则可能会有不同的值

如果不是注册用户,则用户\u id可以为空

我需要这样的结果表

 order
    no |user_name | user_id | total_pr| count |  last_order
    ---------------------------------------------
    1  |  NewUser3| 3       |  11     |   2   |2017-07-12 09:01:00.000000
    2  |  User1   | 1       |  8      |   1   |2017-07-12 10:01:00.000000
    3  |  NewUser |         |  10     |   1   |2017-07-12 11:01:00.000000
    4  |  NewUser |         |  100    |   1   |2017-07-12 12:01:00.000000
用户名值必须取自最大订单日期,并且需要按任何列排序 如果user_id为null,则所有同名用户都是不同的用户

我试试这个

SELECT  order.user_id, order.user_name, SUM(price), COUNT(order.user_id), MAX(order_date) 
FROM order, user
WHERE  
      order.order_date  >= '2017-07-01 08:01:00.000000'
      AND order.order_date  <= '2017-07-15 08:01:00.000000'
GROUP BY user_id, user_name ORDER BY count ASC
但这并不是全部

试试:

SELECT  order.id, order.user_name, SUM(price), COUNT(order.user_id), MAX(order_date) 
FROM order 
LEFT OUTER JOIN user on order.user_id = user.id
WHERE  
      order.order_date  >= '2017-07-01 08:01:00.000000'
      AND order.order_date  <= '2017-07-15 08:01:00.000000'
GROUP BY user_id, user_name ORDER BY count ASC
试试这个

with users_cte (user_name,user_id,total_pr,count,last_order) as (
--Fetching data for members who are in users table
Select user_name,user_id,total_pr,count,last_order from (
    SELECT  o.user_name, o.user_id, row_number() over (partition by o.user_id order by order_date desc) rno
, SUM(price) over (partition by o.user_id) as total_pr, COUNT(o.user_id) over(partition by o.user_id) as count , MAX(order_date)  over (partition by o.user_id) as last_order
FROM orders o
left join users u
on o.user_id = u.id
WHERE
    u.id is not null
and o.order_date  >= '2017-07-01 08:01:00.000000'
AND o.order_date  <= '2017-07-15 08:01:00.000000'
    ) A WHere A.rno=1

union all
--Fetching data for new members   
SELECT o.user_name,null as user_id
, SUM(price) as total_pr, COUNT(o.user_name), MAX(order_date) 
FROM orders o
left join users u
on o.user_id = u.id
WHERE
    u.id is null
and o.order_date  >= '2017-07-01 08:01:00.000000'
AND o.order_date  <= '2017-07-15 08:01:00.000000'
GROUP BY o.user_name
)

Select row_number() over(order by last_order) as no,* from users_cte

编号|用户名|用户名|用户id |总数|计数|最后一批订单df 4 0 2017-07-12 13:54:12.173724 5 df 5 0 2017-07-12 13:54:12.173724 3 df 3 0 2017-07-12 13:54:12.173724 2 grt 2 1 2017-07-12 13:54:12.173724 gg 1 1 1 2017-07-12 13:54:12.173724所以接近用户1 8 1 1 2017-07-12-12:13:54:12:12新用户1 17327-12:12110 0 2017-07-12 13:54:12.173724非常接近,非常感谢!!!!!!!!!!!工作不错,我浪费了很多时间去寻找解决方案。