【问题标题】:SQL SELECT DISTINCT ID from copies ORDER BY CIDSQL SELECT DISTINCT ID 从副本 ORDER BY CID
【发布时间】:2009-08-25 07:02:35
【问题描述】:

我想要这样的东西:

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

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

这也可能由于其他原因完全错误,所以我会解释我需要什么。

我有一个表,可以“记录”我的主表中的每一行更改。这样以后我就可以回到过去,看看主表在某个时间的样子。

所以我需要的是一个查询,按 CID 对所有行进行排序,其中时间戳

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

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

【问题讨论】:

    标签: php sql mysql


    【解决方案1】:

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

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

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

    这将为您提供关系 ID 您想要的 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;
    

    【讨论】:

    • 如果我想要绝对迟到的行,这似乎可行,但如果我想要时间戳
    • 乍一看,这似乎可以解决问题,我会进行一些检查,看看是否可以。谢谢 Ondrej Palkovsky。
    【解决方案2】:
    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;
    

    有效吗?

    【讨论】:

    • 嗨 eyze,这不起作用。我已经尝试过了,它没有正确排序 CID。为什么会这样,我不知道。
    • 不,我已经用这个查询尝试了不同的排序方法,但没有运气。这很奇怪,但我不知道 MySQL 的内部工作原理,所以肯定有一个很好的解释来解释它为什么会这样。
    【解决方案3】:

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

     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
    

    【讨论】:

    • 嗨,knitti,这就是 CID 的用途。它是表中的唯一值,我想要最新的 CID WHERE 时间戳
    • 然后选择 Ondrej Palkovsky 的解决方案,这正是你想要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多