Google cloud spanner 如何获取具有最大值的行?
我认为有效的方法是:Google cloud spanner 如何获取具有最大值的行?,google-cloud-spanner,Google Cloud Spanner,我认为有效的方法是: SELECT * FROM customer_sale WHERE sale_date < '2019-02-01' GROUP BY customer_id HAVING sale_date = MAX(sale_date) 预期的结果是: customer_id sale_date ------------------------------- 1 Jan 30 2
SELECT *
FROM customer_sale
WHERE sale_date < '2019-02-01'
GROUP BY customer_id
HAVING sale_date = MAX(sale_date)
预期的结果是:
customer_id sale_date
-------------------------------
1 Jan 30
2 Jan 15
SQL中的HAVING子句指定SQL SELECT语句应
仅返回聚合值满足指定条件的行。
它被添加到SQL语言中,因为WHERE关键字无法
用于
这是我正在使用的测试表:
index, customer_id, sale_date
1 1 2017-08-25T07:00:00Z
2 1 2017-08-26T07:00:00Z
3 1 2017-08-27T07:00:00Z
4 1 2017-08-28T07:00:00Z
5 2 2017-08-29T07:00:00Z
6 2 2017-08-30T07:00:00Z
使用此查询:
Select customer_id, max(sale_date) as max_date
from my_test_table
group by customer_id;
我得到这个结果:
customer_id max_date
1 2017-08-28T07:00:00Z
2 2017-08-30T07:00:00Z
还包括where声明:
Select customer_id, max(sale_date) as max_date
from my_test
where sale_date < '2017-08-28'
group by customer_id;
SQL中的HAVING子句指定SQL SELECT语句应
仅返回聚合值满足指定条件的行。
它被添加到SQL语言中,因为WHERE关键字无法
用于
这是我正在使用的测试表:
index, customer_id, sale_date
1 1 2017-08-25T07:00:00Z
2 1 2017-08-26T07:00:00Z
3 1 2017-08-27T07:00:00Z
4 1 2017-08-28T07:00:00Z
5 2 2017-08-29T07:00:00Z
6 2 2017-08-30T07:00:00Z
使用此查询:
Select customer_id, max(sale_date) as max_date
from my_test_table
group by customer_id;
我得到这个结果:
customer_id max_date
1 2017-08-28T07:00:00Z
2 2017-08-30T07:00:00Z
还包括where声明:
Select customer_id, max(sale_date) as max_date
from my_test
where sale_date < '2017-08-28'
group by customer_id;
我也有同样的问题,这样我就可以解决了。如果你有一张很大的桌子,可能需要一些时间 基本上,将普通表与具有最大值记录的表连接起来可以解决此问题
select c.* from
(select * from customer_sale WHERE sale_date < '2019-02-01') c
inner join
(SELECT customer_id, max(sale_date) as max_sale_date FROM customer_sale WHERE
sale_date < '2019-02-01' group by customer_id) max_c
on c.customer_id = max_c.customer_id and c.sale_date = max_c.sale_date
我也有同样的问题,这样我就可以解决了。如果你有一张很大的桌子,可能需要一些时间 基本上,将普通表与具有最大值记录的表连接起来可以解决此问题
select c.* from
(select * from customer_sale WHERE sale_date < '2019-02-01') c
inner join
(SELECT customer_id, max(sale_date) as max_sale_date FROM customer_sale WHERE
sale_date < '2019-02-01' group by customer_id) max_c
on c.customer_id = max_c.customer_id and c.sale_date = max_c.sale_date
不幸的是,这不起作用-请注意,这个问题是专门的GCP云扳手,而不是标准的SQL-这不是一个SQL问题:PI在扳手中做到了这一点。啊哈,我明白了-道歉!我在回答中假设它只是普通的SQL。不幸的是,这不起作用-请注意,这个问题特别是GCP Cloud Paner,而不是标准的SQL-这不是一个SQL问题:PI在Paner中做到了这一点。啊哈,我明白了-抱歉!我假设答案中只是普通的SQL。添加表的模式和示例Customer\u id LONG、sale\u date时间戳会很有帮助。上面的查询就是一个例子,虽然可能有些事情更清楚?我不理解sale_date=MAXsale_date,如果sale date是一个时间戳,那么MAX of timestamp应该返回什么?您想要的行的最大值是什么?举例来说,我的意思是显示该表中的3-4行以及查询的输出内容。使用示例编辑添加表的架构和示例Customer\u id LONG、sale\u date时间戳会很有帮助。上面的查询就是一个例子,虽然可能有些事情更清楚?我不理解sale_date=MAXsale_date,如果sale date是一个时间戳,那么MAX of timestamp应该返回什么?您想要最大值为什么的行?举例来说,我的意思是显示该表中的3-4行以及您的查询的输出。使用示例编辑