Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL选择具有不同日期的相同字段_Sql - Fatal编程技术网

SQL选择具有不同日期的相同字段

SQL选择具有不同日期的相同字段,sql,Sql,我需要使用MS SQL Server 2008运行一个查询,以获取一些数据。基本上,我有3个唯一的字段,还有3个需要在时间范围内重复的字段。因此,在主select语句中有三个子查询。我只尝试了一个子查询,让它工作,然后复制n粘贴另外两个子查询并更改日期范围 下面是我提出的SQL,但它给了我一个错误。我正在尝试使用子查询,因为我没有创建过程的PERM SELECT mon.description as ScriptName, up0.pageseqnum as PageSeq, usd.Displ

我需要使用MS SQL Server 2008运行一个查询,以获取一些数据。基本上,我有3个唯一的字段,还有3个需要在时间范围内重复的字段。因此,在主select语句中有三个子查询。我只尝试了一个子查询,让它工作,然后复制n粘贴另外两个子查询并更改日期范围

下面是我提出的SQL,但它给了我一个错误。我正在尝试使用子查询,因为我没有创建过程的PERM

SELECT
mon.description as ScriptName,
up0.pageseqnum as PageSeq,
usd.DisplayName as PageName,

--This subquery is the one week old data for the Response Time, Page Weight, and Number of Objects.
(SELECT
ROUND(AVG(CAST(up1.ResponseTime AS FLOAT)* 0.001),3) AS ResponseTime,
ROUND(AVG(CAST(up1.numbytes AS FLOAT)* 0.001), 3) AS NumberofKilobytes,
CONVERT(INT,AVG(up1.numobj),0) AS NumberOfObjects
FROM
table0 AS up1
WHERE
up1.Monitor_Id = up0.Monitor_id
AND up1.TestTime BETWEEN DATEADD(HOUR,4,'2012-05-14 00:00:00') AND DATEADD(HOUR,4,'2012-05-21 00:00:00')
AND ISNULL(up1.ContentMatchStatus,'0')= 0
AND up1.UserScriptStatus = 0
AND up1.TimeoutStatus = 0
AND up1.ResponseTime > 0
) AS CurrentWeek

FROM
table0 (nolock) AS up0
JOIN table1 usd ON up0.Monitor_Id=usd.monitor_id
and up0.PageSeqNum=usd.PageSeqNum
JOIN table3 mon on up0.Monitor_Id = mon.Monitor_id

WHERE
up0.Monitor_Id in (1, 2, 3, 4, 5, 6, 7, 8 ,9 ,10)

GROUP BY up0.Monitor_Id, mon.Description, up0.PageSeqNum, usd.DisplayName
ORDER BY mon.Description ASC;
我希望结果集应该有这些列,并且我可以在本周之后再添加前两周的数据!因此,请滚动查看我正在谈论的内容

| CurrentWeek (Sub Query) | OneWeekOld (Sub Query) | ScriptName | PageSeq | PageName | ResponseTime | NumberofKilobytes | NumberOfObjects | ResponseTime | NumberofKilobytes | NumberOfObjects | Test1 | 0 | Home | 1.2 | 50.23 | 56 | 1.2 | 50.23 | 56 | Test1 | 1 | Sale | 2.2 | 50.23 | 56 | 1.2 | 50.23 | 56 | Test1 | 2 | Bake | 3.2 | 50.23 | 56 | 1.2 | 50.23 | 56 | Test1 | 3 | Cake | 4.2 | 50.23 | 56 | 1.2 | 50.23 | 56 | Test2 | 0 | Home | 1.2 | 50.23 | 56 | 1.2 | 50.23 | 56 | Test2 | 1 | Sale | 2.2 | 50.23 | 56 | 1.2 | 50.23 | 56 | Test2 | 2 | Bake | 3.2 | 50.23 | 56 | 1.2 | 50.23 | 56 | |CurrentWeek(子查询)| OneWeekOld(子查询)| ScriptName | PageSeq | PageName | ResponseTime | NumberOfKB | NumberOfObjects | ResponseTime | NumberOfKB | NumberOfObjects| 测试1 | 0 | Home | 1.2 | 50.23 | 56 | 1.2 | 50.23 | 56| 测试1 | 1 |销售| 2.2 | 50.23 | 56 | 1.2 | 50.23 | 56| 测试1 | 2 |烘焙| 3.2 | 50.23 | 56 | 1.2 | 50.23 | 56| 测试1 | 3 |蛋糕| 4.2 | 50.23 | 56 | 1.2 | 50.23 | 56| 测试2 | 0 | Home | 1.2 | 50.23 | 56 | 1.2 | 50.23 | 56| 测试2 | 1 |销售| 2.2 | 50.23 | 56 | 1.2 | 50.23 | 56| 测试2 | 2 |烘焙| 3.2 | 50.23 | 56 | 1.2 | 50.23 | 56|
任何帮助都将不胜感激。

尝试以下方法:

SELECT  mon.description as ScriptName,
        up0.pageseqnum as PageSeq,
        usd.DisplayName as PageName,
        wk.ResponseTime,
        wk.NumberofKilobytes,
        wk.NumberOfObjects

FROM
table0 (nolock) AS up0
JOIN table1 usd ON up0.Monitor_Id=usd.monitor_id
and up0.PageSeqNum=usd.PageSeqNum
JOIN table3 mon on up0.Monitor_Id = mon.Monitor_id
CROSS APPLY (   SELECT  up1.Monitor_Id,
                        ROUND(AVG(CAST(up1.ResponseTime AS FLOAT)* 0.001),3) AS ResponseTime,
                        ROUND(AVG(CAST(up1.numbytes AS FLOAT)* 0.001), 3) AS NumberofKilobytes,
                        CONVERT(INT,AVG(up1.numobj),0) AS NumberOfObjects
                FROM table0 AS up1
                WHERE up1.TestTime BETWEEN DATEADD(HOUR,4,'2012-05-14 00:00:00') AND DATEADD(HOUR,4,'2012-05-21 00:00:00')
                AND ISNULL(up1.ContentMatchStatus,'0')= 0
                AND up1.UserScriptStatus = 0
                AND up1.TimeoutStatus = 0
                AND up1.ResponseTime > 0 
                GROUP BY up1.Monitor_Id) wk

WHERE up0.Monitor_Id in (1, 2, 3, 4, 5, 6, 7, 8 ,9 ,10)
AND up0.Monitor_Id = up1.Monitor_Id
ORDER BY mon.Description ASC;
如果您将您的模式发布到sqlfiddle.com上,那么我就可以针对它编写一个查询,以返回您需要的内容


另外,我假设您使用的是SQL Server,因此使用了APPLY。请说明您使用的是哪个数据库系统。

您应该提供输入和输出的示例。这不起作用,我可以获得更多帮助吗?我需要三周的数据。见鬼,有没有一种方法可以附加到MS SQL的末尾?我不介意运行三个不同的SQL语句。