1

我正在尝试获取有关两个日期的差异以及这种差异发生的频率的一些信息。我可以用:

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
...

我在数据库中没有 CREATE VIEW 的权限,所以我在想一个嵌套语句,例如:

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

但我不断收到错误消息 207 和 208!

请告诉我我做错了什么。我一直在搜索和尝试各种事情,但到目前为止,我能想到的只是我需要为“db1.dbo.t1 JOIN db2.dbo.t2”提供一个别名,这样我就可以用以下方式调用它:

SELECT Days, COUNT (*) AS Diff
FROM new_dual_db_alias
WHERE EXISTS 

谢谢,

4

2 回答 2

1

在 SQL Server 2005 及更高版本上,您还可以使用 CTE(Common Table Express)

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(*)

CTE 类似于“动态视图”,仅对下一条语句有效。

那对你有用吗?

于 2009-11-28T12:29:27.297 回答
1

我认为-尽管我无法快速测试:

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
于 2009-11-28T11:10:25.283 回答