我有一个没有修改日期的项目表和一个对所有表进行更改的日志表。在日志表中,您可以为一个项目拥有多条记录(每次更改内容时都会在日志表中写入一行)。我试图创建一个选择查询,只有在过去7天内创建/更新的项目。
我的查询有问题,因为我收到:
'derived table Log1 has no name for column 2' SQLCODE=-163
我代码:
select pr.projectid,
pr.projecttitle
from project pr
inner
join (select row_ID,
max(date_action)
from logtable_data
group by row_ID
having table_name = 'PROJECT'
and max(date_action) > dateadd(day,-7,convert(Date, getdate(), 365))
) Log1
on pr.projectid = Log1.row_ID
-- table_name = 'PROJECT'
仅表示'PROJECT'
表与logtable
表的变化
您的子查询正在连接子句中使用,因此它也被称为派生表。
派生表必须为select
列表中的每个列/表达式都有一个名称。
第二列/表达式-max(date_action)
-没有名称,因此出现错误消息。
还有几个问题:
table_name = 'PROJECT'
应以形式提供,其中子句getdate()
返回一个日期,所以没有必要将其结果转换为date
,即convert(Date,...)
是不必要的。(注意:我也假设date_action
列数据类型为date
或datetime
]
pull this all together:
select pr.projectid,
pr.projecttitle
from project pr
inner
join (select row_ID,
max(date_action) as max_action_date -- 'as' clause used to name column
from logtable_data
where table_name = 'PROJECT' -- limit data selection
group by row_ID
having max(date_action) > dateadd(day,-7,getdate())
) Log1
on pr.projectid = Log1.row_ID