繁体   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