如何解决修改查询sql
|| 我有一个查询来聚合(压缩)从1分钟到任何其他时间范围的数据,并且它运行完美。Use StockDataFromSella;
DECLARE @D1 DateTime
DECLARE @D2 DateTime
DECLARE @Interval FLOAT
SET @D1 = \'2008-09-21T09:00:00.000\'
SET @D2 = \'2010-10-20T17:30:00.000\'
SET @Interval = 15
;WITH
L0 AS (SELECT 1 AS c UNION ALL SELECT 1),L1 AS (SELECT 1 AS c FROM L0 A CROSS JOIN L0 B),L2 AS (SELECT 1 AS c FROM L1 A CROSS JOIN L1 B),L3 AS (SELECT 1 AS c FROM L2 A CROSS JOIN L2 B),L4 AS (SELECT 1 AS c FROM L3 A CROSS JOIN L3 B),Nums AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS i FROM L4),Ranges AS(
SELECT
DATEADD(MINUTE,@Interval*(i-1),@D1) AS StartRange,DATEADD(MINUTE,@Interval*i,@D1) AS NextRange
FROM Nums where i <= 1+CEILING(DATEDIFF(MINUTE,@D1,@D2)/@Interval)),cte AS (
SELECT
*,ROW_NUMBER() OVER (PARTITION BY Simbolo,r.StartRange ORDER BY [DataOra]) AS RN_ASC,r.StartRange ORDER BY [DataOra] DESC) AS RN_DESC
FROM Ranges r
JOIN dbo.tbl1MinENI p ON p.[DataOra] >= r.StartRange and p.[DataOra] < r.NextRange )
SELECT
Simbolo,MAX(CASE WHEN RN_ASC=1 THEN [DataOra] END) AS DataOra,MAX(CASE WHEN RN_ASC=1 THEN [Apertura] END) AS [Apertura],MAX(Massimo) Massimo,MIN(Minimo) Minimo,MAX(CASE WHEN RN_DESC=1 THEN [Chiusura] END) AS [Chiusura],SUM(Volume) Volume
/*MAX(CASE WHEN RN_DESC=1 THEN [DataOra] END) AS ChiusuraDataOra*/
FROM cte
GROUP BY Simbolo,StartRange
ORDER BY DataOra
我想将第二列DataOra(DateTime)分为两个不同的列,一列用于日期(如果可能以dd / mm / yyyy格式显示),第二列仅用于时间。
任何帮助,非常感谢,谢谢。
阿尔贝托
解决方法
获得这些值的最简单方法是使用
CONVERT
。转换日期时,SQL Server具有一些内置的日期格式。
CONVERT(VARCHAR,MAX(CASE WHEN RN_ASC=1 THEN [DataOra] END),103) AS DataOraDate,CONVERT(VARCHAR,114) AS DataOraTime,
这两个代码(103和114)对应于所需的格式。请参阅http://msdn.microsoft.com/zh-cn/library/ms187928.aspx,以获取有关这些格式以及可以转换为其他格式的更多信息。
, 看来您只需要更改选择。
代替这个
MAX(CASE WHEN RN_ASC=1 THEN [DataOra] END) AS DataOra,
用这个:
CONVERT(VARCHAR(8),108) AS HourMinuteSecond,CONVERT(VARCHAR(8),101) AS DateOnly,
希望能帮助到你。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。