我抓住下一季度的第一天StartDate
。我怎样才能添加90天。以下内容为EndDate
中的StartDate提供了无效的列错误。
SELECT
DATEADD(qq, DATEDIFF(qq, 0, MAX(Time_Stamp)) + 1, 0) as StartDate,
DATEADD(day, 90, MAX(StartDate)) as EndDate
FROM Survey
WHERE MainHospital = 'Hospital1'
柱
Time_Stamp
-----------
2014-06-04 16:01:14.000
2014-06-04 15:55:33.000
2014-06-04 15:45:05.000
2014-06-04 15:36:15.000
2014-06-04 15:00:34.000
2014-06-04 14:35:24.000
2014-06-04 14:04:50.000
2014-06-04 13:46:55.000
2014-06-04 13:23:57.000
2014-06-04 11:27:51.000
仅供参考,我发现这非常有用: http://zarez.net/?p=2484
最终结果是这样的:
SELECT
--Returns first day of next quarter
DATEADD(qq, DATEDIFF(qq, 0, MAX(Time_Stamp)) + 1, 0) as StartDate,
--Returns last day of next quarter
DATEADD (dd, -1, DATEADD(qq, DATEDIFF(qq, 0, MAX(Time_Stamp)) +2, 0)) as EndDate
FROM Survey
WHERE MainHospital = 'Hospital1'
答案 0 :(得分:3)
它无效,因为StartDate是您日期计算的别名。只有在有结果时才能使用别名。换句话说,当您从服务器返回数据集时,别名可用。
例如,您可以使用子查询:
SELECT
StartDate,
DATEADD(day, 90, MAX(StartDate)) as EndDate
FROM (
SELECT
DATEADD(qq, DATEDIFF(qq, 0, MAX(Time_Stamp)) + 1, 0) as StartDate
FROM Survey
WHERE MainHospital = 'Hospital1'
) DS
答案 1 :(得分:2)
sql查询不知道select中的列别名。这是一个自引用错误。 select语句创建别名,因此它不能自己使用别名。 select之后运行的唯一语句是order by,您可以在其中使用别名。
我会重用你的逻辑来防止需要子查询。由于90天只是另一个季度,因此将1更改为2并为时间戳添加另一个季度。
SELECT
DATEADD(qq, DATEDIFF(qq, 0, MAX(Time_Stamp)) + 1, 0) as StartDate,
DATEADD(qq, DATEDIFF(qq, 0, MAX(Time_Stamp)) + 2, 0) as EndDate
FROM Survey
WHERE MainHospital = 'Hospital1'
答案 2 :(得分:1)
您无法在同一查询中按名称引用派生列。你必须在这里添加相同的逻辑。
SELECT
DATEADD(qq, DATEDIFF(qq, 0, MAX(Time_Stamp)) + 1, 0) as StartDate,
DATEADD(day, 90, DATEADD(qq, DATEDIFF(qq, 0, MAX(Time_Stamp)) + 1, 0)) as EndDate
FROM Survey
WHERE MainHospital = 'Hospital1'
不太确定你在那里尝试用MAX做什么,所以我就把它删除了。