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);
}