簡體   English   中英

sql中帶有單獨組的最新結果

[英]Most latest result with separate group in sql

我有如下圖所示的表格數據。 在此處輸入圖片說明

每3次輸入6條記錄。 (早上2點,下午2點,晚上2點)

當我在DATE進行搜索時,我想要得到如下圖所示的結果。 在此處輸入圖片說明

我想提出如下結果。 在此處輸入圖片說明

我試過這個SQL查詢,但沒有運氣。

select c.currency, c.date, c.textbody
                from currencies c
                inner join (
                    select currency, max(date) as MaxDate
                    from currencies
                    group by currency
                ) cc on c.currency = cc.currency and c.date = cc.MaxDate
                where date ='2017-11-20'
                group by currency
                order by currency'

需求的故事每天用戶在3個時段中輸入6條記錄,早上用戶輸入2條記錄(EURUSD和GBPUSD)。 然后,我將在網頁中顯示為一組。 然后在晚上用戶輸入另外2條記錄(EURUSD和GBPUSD),之后我需要顯示最新2條記錄在頂部組中,並且前2條記錄在下面。 每天6記錄3組。

我認為您要像這樣搜索GROUP BY時間戳:

SELECT GROUP_CONCAT(currency) AS currencies, GROUP_CONCAT(text_body) AS text_bodyies, GROUP_CONCAT(timestamp) AS inserted_time
FROM currencies
WHERE date = '2017-11-20'
GROUP BY 
CASE 
    WHEN HOUR(timestamp) < 14 THEN 1 -- MORNING
    WHEN HOUR(timestamp) < 17 THEN 2 -- AFTERNOON
    WHEN HOUR(timestamp) < 21 THEN 3 -- EVENING
END
ORDER BY timestamp DESC

進行簡單查詢:

 SELECT currency, textBody FROM currencies 
 WHERE date = '2017-11-20'
 ORDER BY timestamp, currency

然后將數據提取到$rows數組,添加一個檢查以僅顯示成對的行並顯示它們。 在PHP中,將如下所示:

$rowsCount = count($rows);

if (in_array($rowsCount, [2, 4, 6])) {

    for ($i = 0; $i < $rowsCount; $rowIndex++) {
        echo $rows[$i]['currency'] . ' ' . $rows[$i + 1]['currency'] . ' ' 
            . $rows[$i]['textbody'] . ' ' . $rows[$i + 1]['textbody'].PHP_EOL;
        $rowIndex += 1;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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