SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY imei ORDER BY date desc) AS row_num FROM t_iot_zdjk_gzyj_lsnlb ) AS subquery WHERE row_num <= 30。帮忙优化这个SQL,只查出昨天有数据的imei
时间: 2024-02-24 07:58:04 浏览: 162
row_number,根据多个字段过滤,partition by
好的,基于你的需求,以下是我优化过的 SQL:
```
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY imei ORDER BY date DESC) AS row_num
FROM t_iot_zdjk_gzyj_lsnlb
WHERE date >= DATEADD(day, -1, CONVERT(DATE, GETDATE())) -- 只查昨天有数据的
) AS subquery
WHERE row_num <= 30
```
优化说明:
1. 在原有 SQL 的基础上,在子查询中添加了 WHERE 子句,仅查询昨天有数据的 imei。
2. 使用了 GETDATE() 函数获取当前时间,CONVERT(DATE, GETDATE()) 将当前时间转换为日期格式,再使用 DATEADD(day, -1, CONVERT(DATE, GETDATE())) 得到昨天的日期。
3. 在 WHERE 子句中使用 date >= 昨天的日期,只查询昨天有数据的 imei。
阅读全文