基于其他表格的MS SQL不同结果

时间:2018-12-19 17:22:30

标签: mysql sql sql-server linq

我想生成一个新表,该表根据其主键显示另一个表的第一个条目和最后一个条目。

我有一个仪表表,其中包含所有Meter Ids

米表

MeterId CostPerUnit
1    1.23
2    4.14
3    5.31
4    13.13

然后我有一个Measurements表,该表每半小时记录一次

测量表

MeterId    StartTime    NumberOfUnits
1    2002-12-01 00:01:00    25
1    2002-12-01 00:30:00    78
1    2003-09-01 02:30:00    30
1    2008-07-02 01:00:00    15
2    1999-01-01 00:30:00    23
2    2000-03-23 05:03:00    30
2    2008-04-18 18:30:00    25
3    2006-04-03 12:00:00    30
4    2004-04-04 11:30:00    13
4    2008-09-09 15:00:00    15

结果表应如下所示:

MeterId    FirstAvailability    LastAvailability
1    2002-12-01    2008-07-02
2    1999-01-01    2008-04-18
3    2006-04-03    2006-04-03
4    2004-04-04    2008-09-09

所以:

  1. 日期必须每天都是唯一的(我认为我可以使用SELECT DISTINCT CAST(StartTime AS DATE)
  2. 找到第一个和最后一个条目(我发现可以对特定的MeterId使用ORDER BY ASCORDER BY DESC,但不确定如何迭代所有的表ID)

注意: -测量表由1000万行和8000米ID组成。

3 个答案:

答案 0 :(得分:2)

简单的最小/最大将在此处工作。

SELECT
    FirstAvailability = MIN(StartTime),
    LastAvailability = MAX(StartTime)
FROM
    Measurement
GROUP BY
    MeterID
ORDER BY
    MeterID

答案 1 :(得分:1)

您可以使用聚合函数min()max()并按

分组
    select a.MeterId, min(a.StartTime), max(StartTime)
    from Measurement 
    group by a.Meter 

答案 2 :(得分:1)

使用max(),min()

   select t1.meterid, convert(date,max(StartTime)) LastAvailability,
     convert(date,min(StartTime))as FirstAvailability    
     table1 t1 join table2 t2 t1.metricid=t2.metricid
    group by t1.meterid