Teradata SQL查询,仅筛选具有所有时段ID条目的行
我有一个包含3列(ID、YYYYMM、sales)的数据集。我只想让那些每个YYYYMM(201909到202003)都有记录的IDTeradata SQL查询,仅筛选具有所有时段ID条目的行,sql,date,count,teradata,window-functions,Sql,Date,Count,Teradata,Window Functions,我有一个包含3列(ID、YYYYMM、sales)的数据集。我只想让那些每个YYYYMM(201909到202003)都有记录的ID 我想将日期设置为ID和YYYYMM级别。我不想使用group by并将数据集缩减为一个ID行。您可以使用窗口函数和限定子句: select t.* from mytable t qualify count(*) over(partition by id) = 1 + max(floor(yyyymm / 100) * 12 + (yyymmm mod 1
我想将日期设置为ID和YYYYMM级别。我不想使用group by并将数据集缩减为一个ID行。您可以使用窗口函数和
限定
子句:
select t.*
from mytable t
qualify count(*) over(partition by id)
= 1 + max(floor(yyyymm / 100) * 12 + (yyymmm mod 100)) over()
- min(floor(yyyymm / 100) * 12 + (yyymmm mod 100)) over()
qualify
子句计算当前id
存在的记录数,并将其与yyyymmdd
s的总计数进行比较,总计数可以通过减去其最大值和最小值来计算(这假设这是一个数字值,就像它看起来的那样).您可以使用窗口函数和限定
子句:
select t.*
from mytable t
qualify count(*) over(partition by id)
= 1 + max(floor(yyyymm / 100) * 12 + (yyymmm mod 100)) over()
- min(floor(yyyymm / 100) * 12 + (yyymmm mod 100)) over()
qualify
子句计算当前id
存在的记录数,并将其与yyyymmdd
s的总计数进行比较,总计数可以通过减去其最大值和最小值(这假设这是一个数字值,看起来是这样的)。Hmmm。我想这正是你想要的:
select t.*
from mytable t
where yyyymm >= 201909 and
yyyymm <= 202003
qualify count(*) over (partition by id) = 6;
选择t*
来自MyT表
其中yyyymm>=201909和
yyyymmHmmm。我想这正是你想要的:
select t.*
from mytable t
where yyyymm >= 201909 and
yyyymm <= 202003
qualify count(*) over (partition by id) = 6;
选择t*
来自MyT表
其中yyyymm>=201909和
yyyymm yyyymm的数据类型是什么?yyyymm的数据类型是什么?因为没有第13-99&0个月,您的最大最小计算结果是94:-)@dnoeth:啊,是的,当然。。。谢谢你指出这一点!好的,我确实(试图)修正了算法。因为没有13-99月&0,你的最大最小计算结果是94:-)@dnoeth:啊,是的,当然。。。谢谢你指出这一点!好的,我确实(试图)修正了算法。