8

我目前正在尝试构建一个有点棘手的 MySQL Select 语句。这是我想要完成的事情:

我有一张这样的桌子:

data_table

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

基本上,我想做的是能够 SELECT/GROUP BY the stringID(stringID 是线程的图片)而不是重复它。此外,我想选择最近的 stringID 行(在上面的示例中是 uniqueID 3)。

因此,如果我要查询数据库,它将返回以下内容(最新的 uniqueID 在顶部):

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.

我希望这是有道理的。谢谢你的帮助。

4

5 回答 5

9

试试下面的。它可能不是最有效的查询,但它会起作用:

SELECT uniqueID, stringID, subject
FROM data_table
WHERE uniqueID IN
 (
  SELECT MAX(uniqueID) 
  FROM data_table
  GROUP BY stringID
 )
ORDER BY uniqueID DESC
于 2009-07-25T06:34:10.363 回答
3
SELECT DISTINCT(a),
  ( SELECT DISTINCT(b) ) AS b,
  ( SELECT DISTINCT(c) ) AS c

FROM tblMyTBL

WHERE...
Order By...
Etc.
于 2011-01-07T18:30:22.207 回答
2

编辑:根据 OP 在评论中提供的新信息,这比依靠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

如果正如 lexu 在评论中提到的那样,您确定最高uniqueID值始终与最新主题相对应,您可以这样做:

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

data_table这基本上意味着:只将那些不存在更高uniqueID价值的记录返回给我。

于 2009-07-25T06:49:45.327 回答
0

我有类似的情况,发现了一个不同的查询。试试这个:

SELECT MAX(uniqueID), stringID, subject
 FROM data_table
 GROUP BY stringID
于 2012-08-03T21:23:40.767 回答
-1
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);
        }
于 2012-10-11T11:16:44.833 回答