来自副本ORDER BY CID的SQL SELECT DISTINCT ID

时间:2009-08-25 07:02:35

标签: php sql mysql

我想要这样的事情:

SELECT DISTINCT ID from copies WHERE timestamp < 1229444506 ORDER BY CID 

问题是这个只返回ID,我需要表中的CID和其他列。

由于其他原因,这可能是完全错误的,所以我将解释我需要的东西。

我有一张表“记录”我的维护中的每一行变化。这样,将来我将能够及时回顾主表如何看起来像某个特定日期。

所以我需要的是一个ORDER所有行BY CID,WHERE timestamp&lt; 1229444506,然后通过ID对它们进行DISCTINCT。

我希望查询按ID返回第一行,最先按CID排序。

我试过用不同的方法来解决这个问题,但没有运气。 有什么建议吗?

3 个答案:

答案 0 :(得分:2)

我不确定我是否正确使用它,但是创建一个只选择列的子查询呢?你写了: “我希望查询按ID返回第一行,最先按CID排序。”

所以,让我们做一个子查询:

SELECT id, max(cid) as maxcid FROM copies WHERE timestamp < XX group by id

这将为您提供关系ID&lt; =&gt;你想要的CID。现在加入吧:

SELECT copies.* FROM copies, (SELECT id, max(cid) as maxcid FROM copies WHERE timestamp < xxx group by id) x  
WHERE copies.id=x.id AND copies.cid=x.maxcid;

答案 1 :(得分:0)

SELECT * FROM copies WHERE timestamp < 1229444506 GROUP BY ID ORDER BY CID DESC;

修改

SELECT * FROM copies WHERE timestamp < 1229444506 GROUP BY ID ORDER BY CID;

您也可以尝试:

SELECT * FROM copies WHERE timestamp < 1229444506 GROUP BY ID ASC ORDER BY CID;

或者:

SELECT * FROM copies WHERE timestamp < 1229444506 GROUP BY ID DESC ORDER BY CID;

有效吗?

答案 2 :(得分:0)

您的数据库如何知道要添加到不同列的哪些行?说你有ː

 id | name
 ---+-----
  1 | a
  1 | b

现在假设的查询:SELECT DISTINCT id, name FROM table。您期望在结果中显示哪个名称? a或b?

如果这不是问题,你可以通过id将结果分组到mysql中,但是未指定你将获得哪个名称

SELECT `id`, `name` FROM `copies` WHERE `timestamp` > 123456789 GROUP BY `id` ORDER BY `cid` DESC