Sql server SQL Server-can';如果不创建视图,就不能指望DATEDIFF
我试图获得一些关于两个日期的差异以及这种差异发生的频率的信息。我可以使用:Sql server SQL Server-can';如果不创建视图,就不能指望DATEDIFF,sql-server,sql-server-2005-express,Sql Server,Sql Server 2005 Express,我试图获得一些关于两个日期的差异以及这种差异发生的频率的信息。我可以使用: SELECT DATEDIFF (day, db1.dbo.t1.Date1, db2.dbo.t2.Date2) AS Days FROM db1.dbo.t1 JOIN db2.dbo.t2 ON db1.dbo.t1.wID = db2.dbo.t2.cID AND db1.dbo.t1.Action LIKE 'Standard'
SELECT
DATEDIFF (day, db1.dbo.t1.Date1, db2.dbo.t2.Date2) AS Days
FROM
db1.dbo.t1
JOIN
db2.dbo.t2 ON db1.dbo.t1.wID = db2.dbo.t2.cID
AND db1.dbo.t1.Action LIKE 'Standard'
AND db2.dbo.t2.Status = 'CLOSED'
它将返回:
Days
-----
4
4
8
21
16
42
...
现在我想数一数那些日子,比如:
Days Diff
----- -----
0 100
1 40
2 22
3 25
...
我在db中没有创建视图的权限,因此我考虑使用嵌套语句,如:
SELECT
Days, COUNT (*) AS Diff
FROM
Days
WHERE EXISTS
(
SELECT DATEDIFF (day, db1.dbo.t1.Date1, db2.dbo.t2.Date2) AS Days
FROM db1.dbo.t1 JOIN db2.dbo.t2
ON db1.dbo.t1.wID = db2.dbo.t2.cID
AND db1.dbo.t1.Action LIKE 'Standard'
AND db2.dbo.t2.Status = 'CLOSED'
)
GROUP BY Days
但我一直收到错误Msgs 207和208
请告诉我我做错了什么。我一直在搜索和尝试各种方法,但到目前为止,我所能想到的是,我需要为“db1.dbo.t1 JOIN db2.dbo.t2”提供一个别名,这样我就可以用:
SELECT Days, COUNT (*) AS Diff
FROM new_dual_db_alias
WHERE EXISTS
谢谢,我想-虽然我不能快速测试:
SELECT Days, COUNT(Days) FROM
(
SELECT
DATEDIFF (day, db1.dbo.t1.Date1, db2.dbo.t2.Date2) AS Days
FROM
db1.dbo.t1 JOIN db2.dbo.t2 ON db1.dbo.t1.wID = db2.dbo.t2.cID AND
db1.dbo.t1.Action LIKE 'Standard' AND
db2.dbo.t2.Status = 'CLOSED'
)
GROUP BY Days
在SQLServer2005及更高版本上,还可以使用CTE(CommonTableExpress) CTE类似于“动态视图”,仅对下一条语句有效 这对你有用吗
WITH DateDiffDays AS
(
SELECT
DATEDIFF (day, db1.dbo.t1.Date1, db2.dbo.t2.Date2) AS Days
FROM
db1.dbo.t1
JOIN
db2.dbo.t2 ON db1.dbo.t1.wID = db2.dbo.t2.cID
WHERE
db1.dbo.t1.Action LIKE 'Standard'
AND db2.dbo.t2.Status = 'CLOSED'
)
SELECT Days, COUNT(*)
FROM DateDiffDays
GROUP BY Days
ORDER BY COUNT(*)