Sql server SQL Server查询

Sql server SQL Server查询,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我想从这里开始: ID ID_HW DATA LAMPADA 305 3517 02-02-2012 00:00 1208 277 3517 30-12-2011 00:00 1127 179 3517 06-12-2011 00:00 1092 134 3517 03-11-2011 00:00 962 89 3517 06-10-2011 00:00 851 69 3517 07-09-2011 00:00

我想从这里开始:

ID  ID_HW   DATA    LAMPADA
305 3517    02-02-2012 00:00    1208
277 3517    30-12-2011 00:00    1127
179 3517    06-12-2011 00:00    1092
134 3517    03-11-2011 00:00    962
89  3517    06-10-2011 00:00    851
69  3517    07-09-2011 00:00    786
42  3517    25-08-2011 00:00    786
306 3518    02-02-2012 00:00    2082
250 3518    30-12-2011 00:00    2045
180 3518    06-12-2011 00:00    2004
163 3518    08-11-2011 00:00    1695
90  3518    06-10-2011 00:00    1516
68  3518    07-09-2011 00:00    1426
43  3518    25-08-2011 00:00    1315
307 3519    02-02-2012 00:00    482
251 3519    02-01-2012 00:00    375
181 3519    06-12-2011 00:00    347
137 3519    07-11-2011 00:00    229
91  3519    06-10-2011 00:00    92
67  3519    07-09-2011 00:00    2305
44  3519    25-08-2011 00:00    2304
到这里:

ID_HW   MINDATA MAXDATA _DAYS_  CONSUMED
3517    25-08-2011 00:00    02-02-2012 00:00    161 422
3518    25-08-2011 00:00    02-02-2012 00:00    161 767
3519    25-08-2011 00:00    02-02-2012 00:00    161 -1822
注意:对于每个id_hw,我需要数据的最大值、最小值、datediff(以天为单位),我的困难部分是对与日期关联的值进行差异化,创建范围内的消耗值

SELECT ID_HW, 
   minTable.DATA as MINDATA, 
   maxTable.DATA as MAXDATA, 
   (maxTable.DATA - minTable.DATA) as _DAYS_, 
   (maxTable.LAMPDA - minTable.LAMPDA) as consumed 
from (SELECT ID_HW, MAX(data) as DATA, LAMPDA from table group by ID_HW) maxTable, 
 (SELECT ID_HW, MIN(DATA) as DATA, LAMPDA from table group by ID_HW) minTable 
where maxTable.ID_HW = minTable.ID_HW

希望这至少为你指明了正确的方向。进行两个子查询,一个用于最大值,一个用于最小值,然后将数据与这两个查询中的select组合起来。

看起来较低的值总是与较早的日期关联,反之亦然。所以你可以这样做:

SELECT ID_HW, MINTABLE.DATA AS MINDATA, MAXTABLE.DATA AS MAXMINDATA, (MAXTABLE.DATA - MINTABLE.DATA) AS DAYS, (MAXTABLE.LAMPADA - MINTABLE.LAMPADA) AS CONSUMED

FROM TABLE,     

SELECT ID_HW, MIN(data) AS DATA, LAMPADA
FROM Table
HAVING MIN(data) = data) AS MINTABLE,   

(SELECT ID_HW, MAX(data) AS DATA, LAMPADA
FROM Table
HAVING MAX(data) = data) AS MAXTABLE

WHERE TABLE.ID_HW = MINTABLE.ID_HW
WHERE TABLE.ID_HW = MAXTABLE.ID_HW
SELECT
  ID_HW,
  MINDATA  = MIN(DATA),
  MAXDATA  = MAX(DATA),
  _DAYS_   = DATEDIFF(DAY, MIN(DATA), MAX(DATA)),
  CONSUMED = MAX(LAMPADA) - MIN(LAMPADA)
FROM yourtable
GROUP BY
  ID_HW
除“天”和“消耗”列外,使用group by作为CTE取出结果

 With cte as
 (
 Select id_hw, min (data) Mindata,max(data) maxdata,
 From Maintable
 Group by Id_hw
)
然后在CTE pass Id_hw和max date的select语句中添加一个相关子查询,以获取Id_hw的lampada的最大值,类似地,pass Id_hw和min date,现在取它们之间的差值

  Select *,datediff(day,Maxdata,Mindata)[_days_],
  (select lampada from maintable where id_hw=CTE.id_hw and date=CTE.Maxdata)-(select lampada from maintable where id_hw=CTE.id_hw and date=CTE.Mindata) Consumed
  from cte

我想是ID_HW、maxDATA、minDATA组成的小组?谢谢,通过一点头脑风暴我到达了那里!最终的解决方案是:选择MINTABLE.ID_HW作为ID_HW,MINTABLE.DATA作为MINDATA,MAXTABLE.DATA作为MAXDATA,DATEDIFFDAY,MINTABLE.DATA,MAXTABLE.DATA作为_DAYS,consumered=从表中选择LAMPADA,其中ID=MAXTABLE.ID-从表中选择LAMPADA,其中ID=MINTABLE.ID从选择MAXID作为ID,ID_HW,MAXDATA作为来自表GROUP BY ID的数据\u HW作为MAXTABLE,选择MINID作为ID,ID\u HW,MINDATA作为来自表GROUP BY ID的数据\u HW作为MINTABLE,其中MAXTABLE.ID\u HW=MINTABLE.ID\u HW