过去X周获取数据时,子查询有太多列错误? [英] Subquery has too many columns error while getting data for past X weeks?

查看:110
本文介绍了过去X周获取数据时,子查询有太多列错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下查询,该查询为我提供了上周的数据,如下所示.它使用以下列中的 week_number 列返回上一列的数据: type amount total 内部子查询.

I have below query which gives me data for previous week as shown below. It returns data with these columns: type, amount and total for previous week using week_number column which is used in inner subquery.

select type,
case
WHEN (type = 'PROC1' AND code = 'UIT') THEN 450
WHEN (type = 'PROC1' AND code = 'KJH') THEN 900
WHEN (type = 'PROC2' AND code = 'LOP') THEN 8840
WHEN (type = 'PROC2' AND code = 'AWE') THEN 1490
WHEN (type = 'PROC3' AND code = 'MNH') THEN 1600
WHEN (type = 'PROC3' AND code = 'LKP') THEN 1900
END as amount,
total
from xyz.orders pa
join
(select clientid as clientid, max(version) as version
from xyz.orders where consumerid IN (select distinct entity_id from abc.items
where week_number = extract(week from current_date) - 1
and item_type like '%Ionize - Data%' )
and createdfor ='BLOCK'
and holder='RELAY_FUTURES'
group by clientid) pb on
pa.clientid = pb.clientid and pa.version = pb.version;

下面是我上面的查询(即前一周)现在返回的输出:

Below is the output I get back as of now with my above query which is for previous week:

type    amount      total
---------------------------
PROC1    450         1768
PROC1    900         123
PROC1    450         456
PROC2    8840        99897
PROC2    1490        2223
PROC2    8840        9876
PROC3    1900        23456
PROC3    1600        12498
PROC3    1600        28756

在上面的查询中,我有一个内部子查询,如下所示,该子查询返回前一周的数据,然后在外部查询中使用其输出.

In my above query I have inner subquery as shown below which returns data for previous week and then output of this is used in the outer query.

select distinct entity_id from abc.items
where week_number = extract(week from current_date) - 1
and item_type like '%Ionize - Data%'

现在,我试图找出一种方式来获取过去6周(不包括当前周)的数据,并按每周进行分组,因此我认为我们需要修改上述内部查询,以便它可以给我过去6周的数据,然后每周以某种方式在外部查询中进行分组.基本上,我想在过去6周中为每种 type 获取 amount total ,如下所示.在某种程度上,我还需要在最终输出中添加 week_number 列.

Now I am trying to figure out a way by which I can get data for past 6 weeks (not including current week) and also grouped by each week so I think we need to modify above inner query so that it can give me data for past 6 weeks and then group by each week somehow at the outer query. Basically I want to get amount, total for each type for past 6 weeks as shown below. Somehow I need to add week_number column as well in my final output.

预期产量

week_number     type    amount      total
--------------------------------------------
  46            PROC1    450         1768
  46            PROC1    900         123
  46            PROC1    450         456
  46            PROC2    8840        99897
  46            PROC2    1490        2223
  46            PROC2    8840        9876
  46            PROC3    1900        23456
  46            PROC3    1600        12498
  46            PROC3    1600        28756
  45            PROC1    450         1768
  45            PROC1    900         123
  45            PROC1    450         456
  45            PROC2    8840        99897
  45            PROC2    1490        2223
  45            PROC2    8840        9876
  45            PROC3    1900        23456
  45            PROC3    1600        12498
  45            PROC3    1600        28756
  44            PROC1    450         1768
  44            PROC1    900         123
  44            PROC1    450         456
  44            PROC2    8840        99897
  44            PROC2    1490        2223
  44            PROC2    8840        9876
  44            PROC3    1900        23456
  44            PROC3    1600        12498
  44            PROC3    1600        28756
  43            PROC1    450         1768
  43            PROC1    900         123
  43            PROC1    450         456
  43            PROC2    8840        99897
  43            PROC2    1490        2223
  43            PROC2    8840        9876
  43            PROC3    1900        23456
  43            PROC3    1600        12498
  43            PROC3    1600        28756
  42            PROC1    450         1768
  42            PROC1    900         123
  42            PROC1    450         456
  42            PROC2    8840        99897
  42            PROC2    1490        2223
  42            PROC2    8840        9876
  42            PROC3    1900        23456
  42            PROC3    1600        12498
  42            PROC3    1600        28756
  41            PROC1    450         1768
  41            PROC1    900         123
  41            PROC1    450         456
  41            PROC2    8840        99897
  41            PROC2    1490        2223
  41            PROC2    8840        9876
  41            PROC3    1900        23456
  41            PROC3    1600        12498
  41            PROC3    1600        28756

所以我尝试通过修改内部子查询尝试以下查询,但由于 invalid operation:subquery有太多列,它给了我错误.知道我在这里做什么错了吗?

So I tried with below query by modifying inner subquery but it gives me error as invalid operation:subquery has too many columns. Any idea what is wrong I am doing here?

select type,
case
WHEN (type = 'PROC1' AND code = 'UIT') THEN 450
WHEN (type = 'PROC1' AND code = 'KJH') THEN 900
WHEN (type = 'PROC2' AND code = 'LOP') THEN 8840
WHEN (type = 'PROC2' AND code = 'AWE') THEN 1490
WHEN (type = 'PROC3' AND code = 'MNH') THEN 1600
WHEN (type = 'PROC3' AND code = 'LKP') THEN 1900
END as amount,
total
from xyz.orders pa
join
(select clientid as clientid, max(version) as version
from xyz.orders where consumerid IN (select week_number, entity_id from abc.items
where week_number >= extract(week from current_date) - 6 
  and week_number <= extract(week from current_date) - 1
  and item_type like '%Ionize - Data%'
order by week_number desc )
and createdfor ='BLOCK'
and holder='RELAY_FUTURES'
group by clientid) pb on
pa.clientid = pb.clientid and pa.version = pb.version;

我将内部查询修改为:

select week_number, entity_id from abc.items
where week_number >= extract(week from current_date) - 6 
  and week_number <= extract(week from current_date) - 1
  and item_type like '%Ionize - Data%'
order by week_number desc

我可能完全错误地实现了期望的输出,因此将不胜感激.

It could be possible that I am doing it completely wrong to achieve the desired output so any help will be appreciated.

推荐答案

Andy问题出在WHERE子句

Andy the issue is with the WHERE clause

where consumerid IN (select week_number, entity_id from abc.items
where week_number >= extract(week from current_date) - 6 
  and week_number <= extract(week from current_date) - 1
  and item_type like '%Ionize - Data%'
order by week_number desc )

该子句希望查看是否消耗"是由子查询产生的列表的成员.但是,此子查询返回2列,并且Redshift无法将1列与2列进行比较.只需删除"week_number",从选择中,此错误将得到解决.

As the clause is looking to see if "consumerid" is a member of the list resulting from the subquery. However this subquery is returning 2 columns and Redshift cannot compare 1 column to 2 columns. Just remove "week_number," from the select and this error will be resolved.

where consumerid IN (select entity_id from abc.items
where week_number >= extract(week from current_date) - 6 
  and week_number <= extract(week from current_date) - 1
  and item_type like '%Ionize - Data%'
order by week_number desc )

这篇关于过去X周获取数据时,子查询有太多列错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆