简体   繁体   English

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

[英]MySQL select from multiple records only records with first and last date

I have a table HC_RSPI_data : 我有一个表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 |

And i want to get the records with the first and last day like: 我想获得第一天和最后一天的记录,例如:

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

OR 要么

One record with 2 fileds Start date and End date like: min(DATE_TIME_END) as Start date and max(DATE_TIME_END) as End date 一条记录,包含2个文件的开始日期和结束日期,例如: min(DATE_TIME_END)作为开始日期, max(DATE_TIME_END)作为结束日期

How can i achieve this? 我怎样才能做到这一点? I was trying something like this 我正在尝试这样的事情

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)

Any ideas? 有任何想法吗?

One method is to aggregate the data and use a join to get the appropriate values: 一种方法是聚合数据并使用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);

To get one row with start and end Date: 要获得包含开始日期和结束日期的一行:

SELECT rssi.RADIO_TYPE, rssi.HOP, rssi.TOWARDS, rssi.RSPI, rssi.TP_NAME,
 MIN(rssi.DATE_TIME_END) as mindt, MAX(rssi.DATE_TIME_END) as maxdt
 FROM HC_RSPI_data as rssi 
 GROUP BY rssi.RADIO_TYPE, rssi.HOP, rssi.TOWARDS, rssi.RSPI, rssi.TP_NAME 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM