查询最新的一组数据 返回

SqlSugar 老数据
6 1258

db.Queryable<SensorData>().Where(it => snList.Contains(it.sensor_sn)).SplitTable(tabs => tabs.Take(3)).ToList();取id最大的一组by sensor_sn,怎么实现

热忱回答6

  • fate sta fate sta VIP0
    2022/12/13

    没听懂

    0 回复
  • 大小孩 大小孩 VIP0
    2022/12/13

    @fate sta:select
    s.id,
    s.name,
    s.sn,
    sd.tested,
    sd.value,
    sd.temperature
    from (
    (SELECT id,sensor_sn,tested,value,ain,temperature from sensor_data_20220101
            where sensor_sn in(
    select
    sn
    from sensor WHERE id in(
                select sensor_id from project_sensor where project_id=3))
        )
    UNION ALL
    (SELECT id,sensor_sn,tested,value,ain,temperature from sensor_data_20230101
            where sensor_sn in(
    select
    sn
    from sensor WHERE id in(
                select sensor_id from project_sensor where project_id=3))
        )
    )as sd
    LEFT join sensor s on s.sn=sd.sensor_sn
    WHERE sd.id in
    (
        select max(id) from  (
            (SELECT id, sensor_sn from sensor_data_20220101
                where sensor_sn in(
    select
    sn
    from sensor WHERE id in(
                select sensor_id from project_sensor where project_id=3))
            )
    UNION ALL
    (SELECT id, sensor_sn from sensor_data_20230101
            where sensor_sn in(
    select
    sn
    from sensor WHERE id in(
                select sensor_id from project_sensor where project_id=3))
        )) as sd1
        
    GROUP BY sd1.sensor_sn);

    实现这个语句

    0 回复
  • fate sta fate sta VIP0
    2022/12/13
    var test48 = db.Queryable<Order>().Select(it => new
                {
                    index2 = SqlFunc.RowNumber(it.Id,it.Name),//order by id partition by name
                    //多字段排序  order by id asc ,name desc
                    //SqlFunc.RowNumber($"{it.Id} asc ,{it.Name} desc ",$"{it.Name}")
                    price=it.Price,
                    date=it.CreateTime
                })
                .MergeTable()//将结果合并成一个表
                .Where(it=>it.index2==1)
               .ToList();
                


    0 回复
  • 大小孩 大小孩 VIP0
    2022/12/14

    @fate sta:还是没弄明白一条语句怎么实现,我现在拆开来弄的,如何用一条语句呢,谢谢

    List<long> idx = db.Queryable<SensorData>().Where(it => snList.Contains(it.sensor_sn)).Where(it => it.channel == "X").SplitTable(tabs => tabs.Take(3)).GroupBy(it => it.sensor_sn).Select(it => SqlFunc.AggregateMax(it.id)).ToList(); // x轴最新数据id

    List<SensorData> sdx = db.Queryable<SensorData>().Where(it => idx.Contains(it.id)).SplitTable(tabs => tabs.Take(3)).ToList();



    0 回复
  • fate sta fate sta VIP0
    2022/12/14

    @大小孩: 你把sql的 rownumber partition by  这种语法搞懂就知道怎么做了 

    0 回复
  • fate sta fate sta VIP0
    2022/12/14

     partition by 代表分组  然


    数据就是


    分组列  number  主键列

    A           1             1

    A           2             2


    B           1             3

    B         2          4



    number=1就是分组第一条

    0 回复