簡體   English   中英

是否可以在mysql表中按日期(時間戳)為每個組選擇10行? 如何進行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM