two other multiple columns and mysql select greatest-n-per-group

mysql - other - select*distinct



MySQL Select Statement DISTINCT para Columnas MĂșltiples (5)

Prueba lo siguiente. Puede que no sea la consulta más eficiente, pero funcionará:

SELECT uniqueID, stringID, subject FROM data_table WHERE uniqueID IN ( SELECT MAX(uniqueID) FROM data_table GROUP BY stringID ) ORDER BY uniqueID DESC

Actualmente estoy tratando de construir una Declaración Selectiva de MySQL algo complicada. Esto es lo que estoy tratando de lograr:

Tengo una mesa como esta:

data_table uniqueID stringID subject 1 144 "My Subject" 2 144 "My Subject - New" 3 144 "My Subject - Newest" 4 211 "Some other column"

Básicamente, lo que me gustaría hacer es poder SELECCIONAR / AGRUPAR POR el ID de cadena (imagen que rosca el ID de cadena) y no tenerlo duplicado. Además, me gustaría SELECCIONAR la fila stringID más reciente, (que en el ejemplo anterior es uniqueID 3).

Por lo tanto, si tuviera que consultar la base de datos, devolvería lo siguiente (con el identificador único más reciente en la parte superior):

uniqueID stringID subject 4 211 "Some other column" 3 144 "My Subject - Newest" //Notice this is the most recent and distinct stringID row, with the proper subject column.

Espero que esto tenga sentido. Gracias por tu ayuda.


Editar: en función de la información nueva proporcionada por el OP en un comentario, sería preferible confiar en uniqueID :

select t.uniqueID , t.stringID , t.subject , t.your_timestamp_col from data_table t left outer join data_table t2 on t.stringID = t2.stringID and t2.your_timestamp_col > t.your_timestamp_col where t2.uniqueID is null

Si, como lexu menciona en un comentario, usted está seguro de que el valor más alto de uniqueID siempre se corresponde con el tema más nuevo, puede hacer esto:

select t.uniqueID , t.stringID , t.subject from data_table t left outer join data_table t2 on t.stringID = t2.stringID and t2.uniqueID > t.uniqueID where t2.uniqueID is null

Lo que básicamente significa: data_table solo los registros de data_table donde no exista un valor data_table más alto.


SELECT DISTINCT(a), ( SELECT DISTINCT(b) ) AS b, ( SELECT DISTINCT(c) ) AS c FROM tblMyTBL WHERE... Order By... Etc.


Tuve una situación similar y encontré una consulta diferente. Prueba esto:

SELECT MAX(uniqueID), stringID, subject FROM data_table GROUP BY stringID


private void LoadAllFamilyMembers(string relationShip) { lbFamilyMembers.SelectedIndexChanged -= new EventHandler(lbFamilyMembers_SelectedIndexChanged); SqlCommand cmd = new SqlCommand("select familymemberid,name from FamilyMembers where relationship = @relationship", con); cmd.Parameters.AddWithValue("@relationship", relationShip); DataTable dt = new DataTable(); SqlDataAdapter adapter = new SqlDataAdapter(cmd); adapter.Fill(dt); lbFamilyMembers.DataSource = dt; lbFamilyMembers.DisplayMember = "name"; lbFamilyMembers.ValueMember = "familymemberid"; lbFamilyMembers.SelectedIndex = -1; lbFamilyMembers.SelectedIndexChanged += new EventHandler(lbFamilyMembers_SelectedIndexChanged); }