簡體   English   中英

MySQL:選擇除列之外僅具有唯一值的行

[英]MySQL: Select rows that have only unique values except for a column

這是我的情況:我有一個表,其中重復的值是有效的(ID字段除外),並且我只想檢索唯一的值。

例如,如果我有寄存器:

+----+--------------+-------------+------+------+-------+-----+
| ID | SATELLITE_ID | ATT_TYPE_ID | TIME | ROLL | PITCH | YAW |
+----+--------------+-------------+------+------+-------+-----+
|  1 |            1 |           1 | 2012 |  1.0 |   2.0 | 1.3 |
+----+--------------+-------------+------+------+-------+-----+
|  2 |            1 |           1 | 2012 |  1.0 |   2.0 | 1.3 |
+----+--------------+-------------+------+------+-------+-----+
|  3 |            1 |           1 | 2011 |  1.0 |   2.0 | 1.3 |
+----+--------------+-------------+------+------+-------+-----+

我只想檢索2和3(ID 1和2是“相等”,而3具有不同的TIME)。

這是表格結構

mysql> describe attitude;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| ID           | int(11)      | NO   | PRI | NULL    | auto_increment |
| SATELLITE_ID | int(11)      | NO   |     | NULL    |                |
| ATT_TYPE_ID  | int(11)      | NO   |     | NULL    |                |
| TIME         | varchar(4)   | NO   |     | NULL    |                |
| ROLL         | double       | NO   |     | NULL    |                |
| PITCH        | double       | NO   |     | NULL    |                |
| YAW          | double       | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

謝謝。

嘗試:

SELECT DISTINCT SATELLITE_ID, ATT_TYPE_ID, TIME, ROLL, PITCH, YAW
FROM ATTITUDE

您可以將max()集合應用於ID列,然后將其余部分應用於GROUP BY

select max(id) id, SATELLITE_ID, ATT_TYPE_ID, TIME, Roll, Pitch, yaw
from attitude
group by SATELLITE_ID, ATT_TYPE_ID, TIME, Roll, Pitch, yaw
order by id

參見帶有演示的SQL Fiddle

結果:

| ID | SATELLITE_ID | ATT_TYPE_ID | TIME | ROLL | PITCH | YAW |
---------------------------------------------------------------
|  2 |            1 |           1 | 2012 |    1 |     2 |   1 |
|  3 |            1 |           1 | 2011 |    1 |     2 |   1 |

嘗試這個:

select SATELLITE_ID, ATT_TYPE_ID, TIME, ROLL, PITCH, YAW 
from ATTITUDE
group by SATELLITE_ID, ATT_TYPE_ID, TIME, ROLL, PITCH, YAW 

或者你可以使用distinct

select distinct SATELLITE_ID, ATT_TYPE_ID, TIME, ROLL, PITCH, YAW 
from ATTITUDE
select max(ID) from attitude
  group by SATELLITE_ID, ATT_TYPE_ID, TIME, ROLL, PITCH, YAW;

這可以根據SATELLITE_ID,ATT_TYPE_ID,TIME,ROLL,PITCH和YAW的不同值任意分組。 如果您忽略了其中一些字段,那僅意味着組的數量可能會減少,彼此之間差異的原因也就更少。

暫無
暫無

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

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