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行以及您的查询的输出。使用示例编辑