Sql 如何从同一个表中组合这两个查询?
因为“ColdFusion不支持通过内部联接或外部联接子句进行联接” 我怎样才能将这两个查询结合起来,它们从哪里给我提供数据 过去的两个月Sql 如何从同一个表中组合这两个查询?,sql,coldfusion,Sql,Coldfusion,因为“ColdFusion不支持通过内部联接或外部联接子句进行联接” 我怎样才能将这两个查询结合起来,它们从哪里给我提供数据 过去的两个月 select starburst_dept_name, starburst_dept_average,MONTHLY_PAST_DATE from cse_reports_month where starburst_dept_name is not NULL and YEAR(MONTHLY_PAST_DATE) = YEAR(GETDATE())
select starburst_dept_name, starburst_dept_average,MONTHLY_PAST_DATE
from cse_reports_month
where starburst_dept_name is not NULL
and YEAR(MONTHLY_PAST_DATE) = YEAR(GETDATE())
and MONTH(MONTHLY_PAST_DATE) = MONTH(GETDATE())-1
select starburst_dept_name, starburst_dept_average,MONTHLY_PAST_DATE
from cse_reports_month
where starburst_dept_name is not NULL
and YEAR(MONTHLY_PAST_DATE) = YEAR(GETDATE())
and MONTH(MONTHLY_PAST_DATE) = MONTH(GETDATE())-2
我希望有一个查询将这两个问题结合起来,我将如何做到这一点,以便
在ColdFusion工作?
我想比较的是上个月的starburst\u dept\u average>2个月前的starburst\u dept\u average?您可以使用SQL UNION语句组合这些查询结果。
只是澄清一下,CF仅在查询的查询(QoQ)中不支持内部联接和外部联接。cse_reports_month是查询的名称还是数据库表的名称?使用getdate()听起来像是一个常规的SQL查询,而不是QoQ 以下查询应根据您的原始逻辑工作:
SELECT starburst_dept_name, starburst_dept_average, MONTHLY_PAST_DATE
FROM cse_reports_month
WHERE starburst_dept_name is not NULL
AND YEAR(MONTHLY_PAST_DATE) = YEAR(GETDATE())
AND (
MONTH(MONTHLY_PAST_DATE) = MONTH(GETDATE())-1 OR
MONTH(MONTHLY_PAST_DATE) = MONTH(GETDATE())-2
)
但正如所指出的,这对1月和2月不起作用-您需要使用一些不同的日期比较运算符
根据您正试图显示的内容(以及每月的过去日期数据表示的内容),以下内容可能会起作用(您可能需要根据您的具体需要进行一些修改):
您是否询问如何在CF中合并2个查询对象?您关于连接的陈述是错误的。您可以在SQL中进行外部连接和内部连接,但不要使用自己的日期逻辑。上面的逻辑有缺陷,如果当前月份是1月或2月,则将失败,因为没有月份=0或月份=。另外,它对索引也不友好。更好的选择是使用实际日期值:
其中col>={janaryFirstInSomeYear}和col<{januaryfirstinstinomeyearplusone}
,用于查询@Bardware states之类的查询。这是SQL还是QoQ?经验法则:如果你可以用SQL或QoQ来做,就用SQL来做。您将获得更好的性能,SQL引擎可能会更好,并且可以处理成行的数据。谢谢,我甚至没有想到这一点,我认为“SQL”足够聪明,可以在1月或2月为我提供正确的数据。这似乎与以下内容类似:declare@today datetime set today='2015-1-22'选择DATEADD(month,-2,(today)),但仍可能需要更改IT数据库,按照您告诉他们的做,而不是按照您希望他们做的做;-)SQL表示在两个数字之间执行比较,因此这正是数据库所做的。如果要比较两个日期值,则需要使用正确的比较表达式。(编辑)如在您的其他线程中提到的那样,在正确性和性能方面更好。参见DaveJemison,您可以考虑修改您的答案以包含查询的工作版本。它将帮助下一个遇到此线程的人:)
SELECT starburst_dept_name, starburst_dept_average, MONTHLY_PAST_DATE
FROM cse_reports_month
WHERE starburst_dept_name is not NULL
AND DATEDIFF(m,MONTHLY_PAST_DATE,getdate()) IN (1,2)