永发信息网

SQL2005如何用当天的最大值减去最小值得到新表

答案:1  悬赏:0  手机版
解决时间 2021-03-21 21:19
  • 提问者网友:最美的风景
  • 2021-03-21 04:50
现有一个表有3个元素ID VALUE TIME
ID对应不同的地方,VALUE是采集的数据, TIME是采集数据的时间。
现在我要处理VALUE里面的实时数据得到我想要的:
在同一个ID中 用今天的最大值 减去 昨天最大值 得到新的VALUE_1.
组成新的表1, ID VALUE_1 TIME(日期)
在同一个ID中 用本月的最大值减去 上一个月的最大值 得到VALUE_2
组成新的表2, ID VALUE_2 TIME(月份)
把表1中不同ID同一时间的VALUE_1 全部相加得到新的VALUE_3
组成新的表3, ID VALUE_3 TIME(日期)
把表2中不同ID同一时间的VALUE_2 相加得到新的VALUE_4
组成新的表4, ID VALUE_3 TIME(月份)
最佳答案
  • 五星知识达人网友:我住北渡口
  • 2021-03-21 05:31


CREATE TABLE  #test(
  ID INT,
  VALUE    INT,
  [TIME] DATETIME
);

INSERT INTO #test
SELECt  1,  11,   '2013-07-18 10:00:00'  UNIOn ALL
SELECT  1,  12,   '2013-07-18 11:00:00'  UNIOn ALL
SELECT  1,  13,   '2013-07-18 12:00:00'  UNIOn ALL
SELECT  1,  14,   '2013-07-19 10:00:00'  UNIOn ALL
SELECT  1,  15,   '2013-07-19 11:00:00'  UNIOn ALL
SELECT  1,  16,   '2013-07-19 12:00:00'  UNIOn ALL
SELECT  2,  21,   '2013-07-18 10:00:00'  UNIOn ALL
SELECT  2,  22,   '2013-07-18 11:00:00'  UNIOn ALL
SELECT  2,  23,   '2013-07-18 12:00:00'  UNIOn ALL
SELECT  2,  24,   '2013-07-19 10:00:00'  UNIOn ALL
SELECT  2,  25,   '2013-07-19 11:00:00'  UNIOn ALL
SELECT  2,  26,   '2013-07-19 12:00:00'
GO


SELECT
  t.ID,
  MAX(t.VALUE) - ISNULL((SELECT MAX(t2.VALUE) FROM #test t2 WHERe t.ID=t2.ID AND DATEADD(DD, DATEDIFF(DD, 0, t2.[TIME]), 1) = DATEADD(DD, DATEDIFF(DD, 0, t.[TIME]), 0)), 0) AS  VALUE_1 ,
  DATEADD(DD, DATEDIFF(DD, 0, t.[TIME]), 0)  AS [TIME]
FROM
  #test t
GROUP BY
  t.ID,
  DATEADD(DD, DATEDIFF(DD, 0, t.[TIME]), 0);


ID          VALUE_1     TIME
----------- ----------- -----------------------
          1          13 2013-07-18 00:00:00.000
          2          23 2013-07-18 00:00:00.000
          1           3 2013-07-19 00:00:00.000
          2           3 2013-07-19 00:00:00.000

(4 行受影响)


上面的查询是 查询  “今天的最大值  减去 昨天最大值”


-----

如果是查询  “本月的最大值减去 上一个月的最大值”

将上面那个查询中的 DATEADD(DD, DATEDIFF(DD, 0, t.[TIME]), 0)  修改为 DATEADD(MONTH, DATEDIFF(MONTH, 0, t.[TIME]), 0)


-----
把表1中不同ID同一时间的VALUE_1  全部相加得到新的VALUE_3

SELECt
  SUM(VALUE_1)  AS  VALUE_3,
  [TIME]
FROM
  表1
GROUP BY
  [TIME];

-----
把表2中不同ID同一时间的VALUE_2  相加得到新的VALUE_4

SELECt
  SUM(VALUE_2)  AS  VALUE_4,
  [TIME]
FROM
  表2
GROUP BY
  [TIME];

-----
注:  上面仅仅只有 查询语句, 没有创建表

如果你是要通过查询创建表,那么
SELECt ...  INTO 新的表名字  FROM ...  WHERe ...

如果你是表已经存在,需要插入数据.
INSERT INTO  新的表名字   SELECt ...  FROM ... WHERe ...
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯