【问题标题】:SQL select id from a table to query again all at onceSQL 从表中选择 id 以一次再次查询
【发布时间】:2014-05-19 13:20:07
【问题描述】:

给定下表:

id message        owner_id counter_party_id datetime_col
1  "message 1"    4        8                2014-04-01 03:58:33
2  "message 2"    4        12               2014-04-02 10:27:34
3  "message 3"    4        8                2014-04-03 09:34:38
4  "message 4"    4        12               2014-04-06 04:04:04

如何获取最新的counter_party号码,然后从那个counter_party id获取所有的消息?

输出:

2  "message 2"    4        12            2014-04-02 10:27:34
4  "message 4"    4        12            2014-04-06 04:04:04

我认为双重选择必须为此工作,但我不知道如何执行此操作。

谢谢

【问题讨论】:

  • 哪个 dbms .. Mysql 或 Sqlserver ?你试过什么?

标签: sql select multi-query


【解决方案1】:

有很多方法可以做到这一点。 这无疑是最直接的。

SELECT *
FROM YourTable
WHERE counter_party_id = (SELECT MAX(counter_party_id) FROM YourTable);

您也可以事先将 MAX 选择到变量中;

DECLARE @m int
SET @m = (SELECT MAX(counter_Party_id) FROM YourTable);

并在你的位置使用@m。

根据您使用的数据库系统,存在其他可以帮助您的工具。

【讨论】:

    【解决方案2】:

    你可以得到最大值counter_party_id:

    SELECT * 
    FROM table 
    WHERE counter_party_id = (
                               SELECT MAX(counter_party_id) 
                               FROM table
                             )
    

    【讨论】:

      【解决方案3】:

      您可以使用子查询来获取最新的 country_party_id,方法是首先按 datetime_col 对列表进行排序,然后从中过滤出第一个 country_party_id。这是查询。

      SELECT * FROM counter_party_id WHERE counter_party_id = (SELECT TOP 1 counter_party_id FROM counter_party_id ORDER BY datetime_col DESC)
      

      【讨论】:

        【解决方案4】:

        如果您使用的是 SQL Server,请尝试第一种方法,否则请使用第二种方法

        试试这个

           SELECT * FROM 
            (
              SELECT *,Row_Number() Over(Partition By counter_party_id  Order By datetime_col DESC) RN
              FROM YourTable
            )
            WHERE RN = 1
        

        或:

           SELECT * FROM YourTable S JOIN
             (
              SELECT counter_party_id,Max(datetime_col) FROM YourTable Group By counter_party_id 
             )T ON S.datetime_col = T.datetime_col
        

        【讨论】:

          【解决方案5】:
           SELECT MAX(counter_party_id ) AS counter_party_id,message,owner_id,datetime_col 
           FROM table;
          

          【讨论】:

            【解决方案6】:

            应该是最后一条消息,所以在这种情况下是 max(id) 或 latest datetime,counter_party_id 只是一个用户 id,最近的 counter_party_id 并不意味着最大 counter_party_id(我在答案中找到了解决方案,我给了道具) :

            SELECT * 
            FROM yourTable 
            WHERE counter_party_id = ( SELECT MAX(id) FROM yourTable )
            

            SELECT * 
            FROM yourTable 
            WHERE counter_party_id = ( SELECT counter_party_id FROM yourTable ORDER BY m.time_send DESC LIMIT 1)
            

            原因是我简化了示例,但我必须以更复杂的方案来实现它。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-10-22
              • 1970-01-01
              • 2021-12-19
              • 2021-01-06
              • 1970-01-01
              • 2014-12-13
              相关资源
              最近更新 更多