一些问题。
已解决 valid_from_tsp <> max(valid_from_tsp)
- 如何根据不是最大日期来过滤我的查询?这个想法不起作用返回的错误是:“在WHERE子句中不正确地使用聚合函数”
我的第二个问题是当我在没有日期的情况下运行它时,我返回了语法错误:Syntax error, expected something like 'IN' keyword or 'CONTAINS' keyword between ')' and ')'
你怎么看我没有?提前致谢
修改了查询
select
a.*,
b.coverage_typ_cde as stg_ctc
from P_FAR_BI_VW.V_CLAIM_SERVICE_TYP_DIM a
inner join (select distinct etl_partition_id, coverage_typ_cde from
P_FAR_STG_VW.V_CLAIM_60_POLICY_STG where row_Create_tsp > '2013-11-30 23:23:59')b
on (a.etl_partition_id = b.etl_partition_id)
where a.valid_from_tsp > '2013-11-30 23:23:59'
and a.coverage_typ_cde = ' '
and (select * from P_FAR_SBXD.T_CLAIM_SERVICE_TYP_DIM where service_type_id = 136548255
and CAST(valid_from_tsp AS DATE) <> '2014-03-14')
麻烦部分:and (select * from P_FAR_SBXD.T_CLAIM_SERVICE_TYP_DIM where service_type_id = 136548255
and CAST(valid_from_tsp AS DATE) <> '2014-03-14')
我正在尝试按service_type_id上的日期过滤,我收到问题2中的错误
至于样本数据:这有点棘手,此查询返回数千行数据。目前,当我进行内连接时,我得到一个辅助唯一索引违规错误。所以我试图过滤掉所有内容,但最近的可能是违规行为(service_type_id是次要索引)
如果我使用service_type_id带回三行不同的valid_from_tsp时间戳,我只想保留最新的一行,而在查询中,不返回其他两行。
答案 0 :(得分:2)
我不知道您的第二个问题,但您的第一个错误是由于在where子句中使用聚合函数max
。我不确定你想在这里做什么,但快速解决方法是用仅返回最大值的子查询替换max(valid_from_tsp)
。
答案 1 :(得分:1)
这是您的查询:
select a.*, b.coverage_typ_cde as stg_ctc
from P_FAR_BI_VW.V_CLAIM_SERVICE_TYP_DIM a inner join
(select distinct etl_partition_id, coverage_typ_cde
from P_FAR_STG_VW.V_CLAIM_60_POLICY_STG
where row_Create_tsp > '2013-11-30 23:23:59'
) b
on (a.etl_partition_id = b.etl_partition_id)
where a.valid_from_tsp > '2013-11-30 23:23:59' and
a.coverage_typ_cde = ' ' and
(select *
from P_FAR_SBXD.T_CLAIM_SERVICE_TYP_DIM
where service_type_id = 136548255 and
CAST(valid_from_tsp AS DATE) <> '2014-03-14'
);
一般情况下,where
子句中没有条件的子查询。某些数据库可能允许此上下文中的标量子查询(一个返回一行和一列),但这不是标量子查询。您可以使用exists
:
where a.valid_from_tsp > '2013-11-30 23:23:59' and
a.coverage_typ_cde = ' ' and
exists (select 1
from P_FAR_SBXD.T_CLAIM_SERVICE_TYP_DIM
where service_type_id = 136548255 and
CAST(valid_from_tsp AS DATE) <> '2014-03-14'
);