SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY date_trunc('hour', timestamp_column) ORDER BY timestamp_column) AS row_num FROM my_table WHERE timestamp_column >= NOW() - INTERVAL '30 days' ) subquery WHERE row_num <= 5;报错Could not choose a best candidate function. You might need to add explicit type casts.
时间: 2024-03-28 16:41:46 浏览: 25
这个错误提示意味着在 PostgreSQL 中找不到一个最佳的函数候选项,可能需要添加明确的类型转换。
根据您提供的 SQL 语句,我认为问题可能出现在 WHERE 子句中的 NOW() 函数的返回类型上。如果 NOW() 函数的返回类型不是 timestamp 类型,则 WHERE 子句中的表达式可能需要进行类型转换。
以下是一个例子:
```
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY date_trunc('hour', timestamp_column) ORDER BY timestamp_column) AS row_num
FROM my_table
WHERE timestamp_column >= NOW()::timestamp - INTERVAL '30 days'
) subquery
WHERE row_num <= 5;
```
在这个例子中,通过添加类型转换 '::timestamp',您可以明确指定 NOW() 函数的返回类型为 timestamp 类型,以帮助 PostgreSQL 选择正确的函数候选项。
请注意,如果您仍然遇到问题,可能需要检查其他表达式中的数据类型,并根据需要添加类型转换。
相关问题
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY date_trunc('hour', timestamp_column) ORDER BY timestamp_column) AS row_num FROM my_table) subquery WHERE row_num <= 5;报错Could not choose a best candidate function. You might need to add explicit type casts.
这个错误提示意味着在 PostgreSQL 中找不到一个最佳的函数候选项,可能需要添加明确的类型转换。
根据您提供的 SQL 语句,我认为问题可能出现在 date_trunc() 函数的返回类型上。如果 date_trunc() 函数的返回类型不是与 timestamp_column 列的数据类型匹配的类型,则可能需要添加类型转换。
以下是一个例子:
```
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY date_trunc('hour', timestamp_column::timestamp) ORDER BY timestamp_column::timestamp) AS row_num
FROM my_table
) subquery
WHERE row_num <= 5;
```
在这个例子中,通过添加类型转换 '::timestamp',您可以明确指定 timestamp_column 列的数据类型为 timestamp 类型,以帮助 PostgreSQL 选择正确的函数候选项。
请注意,如果您仍然遇到问题,可能需要检查其他表达式中的数据类型,并根据需要添加类型转换。
select *, row_number()over(partition by id order by salary desc) ranking
这是一个使用`row_number()`函数和`over()`子句的SQL查询语句,用于在每个id分组中按照salary降序排列,并为每个分组中的行分配一个排名。下面是两个例子:
引用的例子:
```sql
with t as (
select *, row_number() over(partition by id order by salary desc) ranking
from tmp_learning_mary
)
select * from t where ranking = 1;
```
这个例子使用了一个公共表表达式(CTE)`t`,在其中使用`row_number()`函数为每个id分组中的行分配了一个排名。然后,查询选择了排名为1的行,即每个分组中的最高薪水行。
引用的例子:
```sql
select * from (
select *, row_number() over(partition by id order by rand()) ranking
from tmp_learning_mary
) t where t.ranking = 1;
```
这个例子与引用的例子类似,只是在`order by`子句中使用了`rand()`函数,它会随机排序每个分组中的行。然后,查询选择了排名为1的行,即每个分组中的随机行。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)