MySQL 从多条记录中仅选择具有第一个和最后一个日期的记录

标签 mysql sql

我有一张 table HC_RSPI_data :

| RADIO_TYPE |   HOP | TOWARDS | RSPI |       TP_NAME |          DATE_TIME_END | TIME_LENGTH | RLTM_min | RLTM_max |
|------------|-------|---------|------|---------------|------------------------|-------------|----------|----------|
| FlexiMetro | H3376 | RAPSANI | RSPI | ODU 1 Radio 1 | June, 08 2015 00:00:00 |       86400 |       65 |       37 |
| FlexiMetro | H3376 | RAPSANI | RSPI | ODU 1 Radio 1 | June, 09 2015 00:00:00 |       86400 |       70 |       37 |
| FlexiMetro | H3376 | RAPSANI | RSPI | ODU 1 Radio 1 | June, 08 2015 00:00:00 |       86400 |       65 |       37 |
| FlexiMetro | H3376 | RAPSANI | RSPI | ODU 2 Radio 2 | June, 10 2015 00:00:00 |       86400 |       74 |       47 |
| FlexiMetro | H3376 | RAPSANI | RSPI | ODU 2 Radio 2 | June, 09 2015 00:00:00 |       86400 |       74 |       47 |
| FlexiMetro | H3376 | RAPSANI | RSPI | ODU 2 Radio 2 | June, 08 2015 00:00:00 |       86400 |       74 |       47 |

我想获取第一天和最后一天的记录,例如:

| RADIO_TYPE |   HOP | TOWARDS | RSPI |       TP_NAME |          DATE_TIME_END | TIME_LENGTH | RLTM_min | RLTM_max |
|------------|-------|---------|------|---------------|------------------------|-------------|----------|----------|
| FlexiMetro | H3376 | RAPSANI | RSPI | ODU 1 Radio 1 | June, 08 2015 00:00:00 |       86400 |       65 |       37 |
| FlexiMetro | H3376 | RAPSANI | RSPI | ODU 1 Radio 1 | June, 10 2015 00:00:00 |       86400 |       70 |       37 |

| FlexiMetro | H3376 | RAPSANI | RSPI | ODU 2 Radio 2 | June, 08 2015 00:00:00 |       86400 |       74 |       47 |
| FlexiMetro | H3376 | RAPSANI | RSPI | ODU 2 Radio 2 | June, 10 2015 00:00:00 |       86400 |       74 |       47 |

一条记录有 2 个字段的开始日期和结束日期,例如: min(DATE_TIME_END) 作为开始日期,max(DATE_TIME_END) 作为结束日期

我怎样才能做到这一点? 我正在尝试这样的事情

SELECT DISTINCT rssi.* 
FROM HC_RSPI_data as rssi
INNER JOIN HC_RSPI_data as j
on  rssi.RADIO_TYPE     =   j.RADIO_TYPE     
and rssi.HOP            =   j.HOP            
and rssi.TOWARDS        =   j.TOWARDS        
and rssi.RSPI           =   j.RSPI           
and rssi.TP_NAME        =   j.TP_NAME
and rssi.DATE_TIME_END = j.DATE_TIME_END or j.DATE_TIME_END = DATE_ADD(rssi.DATE_TIME_END, INTERVAL 6 DAY)

有什么想法吗?

最佳答案

一种方法是聚合数据并使用join 来获取适当的值:

SELECT rssi.* 
FROM HC_RSPI_data rssi INNER JOIN
     (SELECT RADIO_TYPE, HOP, TOWARDS, RSPI, TP_NAME,
             MIN(DATE_TIME) as mindt, MAX(DATE_TIME) maxdt
      FROM HC_RSPI_data
      GROUP BY RADIO_TYPE, HOP, TOWARDS, RSPI, TP_NAME
     ) j
     ON  rssi.RADIO_TYPE     =   j.RADIO_TYPE and
         rssi.HOP            =   j.HOP and
         rssi.TOWARDS        =   j.TOWARDS and       
         rssi.RSPI           =   j.RSPI and    
         rssi.TP_NAME        =   j.TP_NAME
         rssi.DATE_TIME in (j.mindt, j.maxdt);

关于MySQL 从多条记录中仅选择具有第一个和最后一个日期的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31561514/

相关文章:

php - 使用 PHP 发送一封电子邮件,其中包含从数据库中获取的信息

php - 我的 WHERE 查询的 MYSQL 部分未运行

sql - 有条件地替换 SELECT 中的值

mysql - 新手需要查询帮助(MYSQL)

sql - 如何在替代条件(2 个中的 1 个)条件下加入表

java - jOOQ如何执行Postgresql函数和运算符

php - 如何进行复杂的 SQL 查询

php - 拉出空白结果

javascript - 我似乎无法通过 xampp 的 ADMIN 按钮查看 mySQL 数据库

php - SQL 删除子查询错误