每天的第一个和最后一个交易日期
First and last transaction date for each day
我想显示每天的第一条和最后一条记录,而不考虑已售出的商品。基本上就是每天的第一个和最后一个交易时间。
示例销售数据:
product_id |product_name |date
1232 |laptop |06/08/2019 17:05:57
1233 |telephone |06/08/2019 16:05:57
1234 |laptop |06/08/2019 15:05:47
1235 |laptop |05/05/2019 05:05:22
1236 |laptop |05/05/2019 03:05:21
1237 |telephone |05/05/2019 20:05:20
1238 |telephone |07/08/2019 01:06:09
1239 |laptop |07/08/2019 05:05:59
1240 |telephone |07/08/2019 20:05:37
1241 |laptop |07/08/2019 23:05:29
结果:
product_id|product_name|date
1234 |laptop |06/08/2019 15:05:47
1232 |laptop |06/08/2019 17:05:57
1236 |laptop |05/05/2019 03:05:21
1237 |telephone |05/05/2019 20:05:20
1238 |telephone |07/08/2019 01:06:09
1241 |laptop |07/08/2019 23:05:29
尝试查询:
select
product_id,
product_name,
MAX(date),
MIN(date)
FROM sales_data
WHERE DATE(date) = DATE(date)
GROUP BY product_id, product_name
一种方法是window函数:
select sd.*
from (select sd.*,
row_number() over (partition by date::date order by date asc) as seqnum_asc,
row_number() over (partition by date::date order by date desc) as seqnum_desc
from sales_data sd
) sd
where 1 in (seqnum_asc, seqnum_desc);
但是,distinct on
和 union all
可能在索引 eson (date::date, date)
和 (date::date, date desc)
:
中表现更好
(select distinct on (date::date) sd.*
from sales_data sd
order by date::date, date asc
)
union all
(select distinct on (date::date) sd.*
from sales_data sd
order by date::date, date desc
);
我想显示每天的第一条和最后一条记录,而不考虑已售出的商品。基本上就是每天的第一个和最后一个交易时间。
示例销售数据:
product_id |product_name |date
1232 |laptop |06/08/2019 17:05:57
1233 |telephone |06/08/2019 16:05:57
1234 |laptop |06/08/2019 15:05:47
1235 |laptop |05/05/2019 05:05:22
1236 |laptop |05/05/2019 03:05:21
1237 |telephone |05/05/2019 20:05:20
1238 |telephone |07/08/2019 01:06:09
1239 |laptop |07/08/2019 05:05:59
1240 |telephone |07/08/2019 20:05:37
1241 |laptop |07/08/2019 23:05:29
结果:
product_id|product_name|date
1234 |laptop |06/08/2019 15:05:47
1232 |laptop |06/08/2019 17:05:57
1236 |laptop |05/05/2019 03:05:21
1237 |telephone |05/05/2019 20:05:20
1238 |telephone |07/08/2019 01:06:09
1241 |laptop |07/08/2019 23:05:29
尝试查询:
select
product_id,
product_name,
MAX(date),
MIN(date)
FROM sales_data
WHERE DATE(date) = DATE(date)
GROUP BY product_id, product_name
一种方法是window函数:
select sd.*
from (select sd.*,
row_number() over (partition by date::date order by date asc) as seqnum_asc,
row_number() over (partition by date::date order by date desc) as seqnum_desc
from sales_data sd
) sd
where 1 in (seqnum_asc, seqnum_desc);
但是,distinct on
和 union all
可能在索引 eson (date::date, date)
和 (date::date, date desc)
:
(select distinct on (date::date) sd.*
from sales_data sd
order by date::date, date asc
)
union all
(select distinct on (date::date) sd.*
from sales_data sd
order by date::date, date desc
);