[英]Is it possible to select 10 rows for each group by date(timestamp) in mysql table ? How to proceed?
我有一個表格,其中包含時間戳,傳感器名稱,溫度,濕度等屬性。 我所做的是通過按照DESC順序中的時間戳排序獲得結果,我有條件獲得它為1天7天或前一個月。 但問題是,當我訪問舊記錄時,我獲得了更多的價值。 我需要做的是,由於我的數據按時間戳排序,每個日期最多需要15到20行/記錄。假設我從6月10日到6月17日獲取數據,每個日期有100條記錄。 我需要特定日期的10/20記錄(每天前20名)。
我的MySQL版本是5.7.26,我嘗試使用ROW_NUMBER,但它沒有幫助
SELECT datestamp AS TIME,Temperature AS TEMPERATURE FROM table_name WHERE NodeAdd = 'SensorName' and datestamp >= DATE_ADD(CURRENT_DATE,INTERVAL -'$somevar' DAY) ORDER BY datestamp DESC
上面的代碼顯示了我如何獲取不同日期的數據,$ somevar變量是硬編碼的,如果用戶選擇日,如果他選擇前一周則為-1,前一個月為-7和-30 ..我需要每天最多20行/記錄。
注意::我的表中沒有ID列或唯一/主鍵,因此我嘗試僅通過日期使用分區來獲取特定行。
您需要為每個組創建行號,即Date,然后只保留行Row Number <10的記錄,因為您希望每組有10個記錄。 以下腳本只是一個指南,您可以將其與表結構相匹配,以獲得所需的輸出 -
SELECT * FROM
(
SELECT *,
(
CASE DateColumn
WHEN @DateColumn THEN @curRow := @curRow + 1
ELSE @curRow := 1 AND @DateColumn := DateColumn
END
) AS rank
FROM
(
SELECT *,CAST(<your_date_column> AS DATE) AS `DateColumn`
FROM Your_table
)A
,(SELECT @curRow := 0, @DateColumn := '') r
ORDER BY <your_date_column>
)A WHERE Rank < 11
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.