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

Mysql MS SQL基于其他表的不同结果,mysql,sql,sql-server,linq,Mysql,Sql,Sql Server,Linq,我想生成一个新表,根据主键显示另一个表的第一个和最后一个条目 我有一个仪表表,其中包含所有仪表ID 仪表表 MeterId CostPerUnit 1 1.23 2 4.14 3 5.31 4 13.13 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

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

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

仪表表

MeterId CostPerUnit
1    1.23
2    4.14
3    5.31
4    13.13
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 CostPerUnit
1    1.23
2    4.14
3    5.31
4    13.13
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
因此:

  • 日期在日期上必须是唯一的(我想我可以使用
    选择DISTINCT CAST(StartTime作为日期)
  • 找到第一个和最后一个条目(我想我可以对特定的MeterId使用
    ORDER BY ASC
    ORDER BY DESC
    ,但不确定如何迭代所有的MeterId)
  • 注:
    -测量表由1000万行和8000米ID组成。

    您可以使用聚合函数min()max()和group by

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

    可以使用聚合函数min()max()和group by

        select a.MeterId, min(a.StartTime), max(StartTime)
        from Measurement 
        group by a.Meter 
    
    使用max(),min()

    使用max(),min()


    简单的最小值/最大值可以在这里使用

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

    简单的最小值/最大值可以在这里使用

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

    日期在白天必须是唯一的-我不确定这意味着什么,如果两个米有相同的开始时间,则排除规则?日期在白天必须是唯一的-我不确定这意味着什么,如果两个米有相同的开始时间,则排除规则?执行此查询大约需要3分钟,这是预期的速度吗?这应该是另一个问题。答案大致取决于您要查询的记录数量,以及MeterID和StartTime字段(如果有的话)属于哪种索引。作为一个单独的问题问这个问题,你会得到更好的反馈。执行这个查询大约需要3分钟,这是一个预期的速度吗?这应该是另一个问题。答案大致取决于您要查询的记录数量,以及MeterID和StartTime字段(如果有的话)属于哪种索引。你最好把这个问题作为一个单独的问题来回答。