代码之家  ›  专栏  ›  技术社区  ›  lickmycode

在support_date WHERE中选择最高值的DISTINCT user_id

  •  1
  • lickmycode  · 技术社区  · 11 年前

    待定支持者 :

    user_id          support_date
    -----------------------------
       1              1301283373
       2              1301283743
       3              1301799207
       1              1403862904
       2              1405174895
       3              1415266390
    

    作为查询的结果,它应该输出每个唯一user_id的最高support_date。

    我的实际查询:

    "SELECT DISTINCT(user_id), support_date
     FROM tb_supporters WHERE
     support_date < " . (time() - 60*60*24*7)
    

    但是,它没有选择user_id旁边的最高support_date。 试用者: MAX(support_date) , GROUP BY user_id , ORDER BY support_date DESC ,但没有任何帮助,它仍然只选择最低的支持日期。

    请您引导我进入正确的方向,如何完成此任务,只选择每个user_id旁边的最高support_date?

    结果应该是:

    user_id          support_date
    -----------------------------
       1              1403862904
       2              1405174895
       3              1415266390
    

    我的查询中的WHERE子句是将support_date在过去7天范围内的user_id排除在外。

    重要说明: 在这7天内的现有用户ID我根本不想被选中,甚至不想选择他们的最高支持日期。

    5 回复  |  直到 11 年前
        1
  •  1
  •   Salman Arshad    11 年前

    查询中的WHERE子句是 阻止 user_id,其中 支持日期为 在…内 过去7天的范围。

    你可以这样表述:

    查询中的WHERE子句是 选择 user_ids最高 支持日期为 外部 过去7天的范围。

    您可以使用 GROUP BY MAX 用一个 HAVING 条款:

    SELECT user_id, MAX(support_date)
    FROM tb_supporters
    GROUP BY user_id
    HAVING MAX(support_date) < UNIX_TIMESTAMP(CURRENT_TIMESTAMP - INTERVAL 7 DAY)
    

    请注意,不能使用 WHERE 子句,因为它将消除 用户支持在过去7天内;而不是 .

        2
  •  0
  •   SMA    11 年前

    尝试以下操作:

    SELECT user_id,max(support_date) as support_date 
    FROM mytable 
    GROUP BY user_id    
    ORDER BY support_date DESC
    
        3
  •  0
  •   GRigol    11 年前

    根据id从tb_supporters组中选择id,max(日期);

        4
  •  0
  •   Oleksandr Savchenko hoda    11 年前

    此外,您还可以为unix时间戳使用默认MySQL函数

    SELECT 
        user_id, MAX(support_date)
    FROM
        tb_supporters
    WHERE
        support_date < (UNIX_TIMESTAMP() - (60 * 60 * 24 * 7))
    GROUP BY user_id
    
        5
  •  0
  •   Abdul Manaf    11 年前

    示例表

    CREATE Table table_sample(id INT, date INT);
    

    一些INSERT语句

    INSERT INTO table_sample VALUES(1,1301283373);
    INSERT INTO table_sample VALUES(2,1301283743);
    INSERT INTO table_sample VALUES(3,1301799207);
    INSERT INTO table_sample VALUES(1,1403862904);
    INSERT INTO table_sample VALUES(2,1405174895);
    INSERT INTO table_sample VALUES(3,1415266390);
    
    SELECT * FROM table_sample;
    +------+------------+
    | id   | date       |
    +------+------------+
    |    1 | 1301283373 |
    |    2 | 1301283743 |
    |    3 | 1301799207 |
    |    1 | 1403862904 |
    |    2 | 1405174895 |
    |    3 | 1415266390 |
    +------+------------+
    6 rows in set (0.00 sec)
    
    Your query 
    
    SELECT id,MAX(date) FROM table_sample GROUP BY id;
    +------------+------+
    |  id |MAX(date)  |
    +------------+------+
    | 1   |  1403862904 |
    | 2   |  1405174895 |
    | 3   |  1415266390 |
    +------------+------+
    3 rows in set (0.00 sec)
    

    要查找日期在过去7天的范围内,可以执行以下操作

    SELECT id,MAX(date) FROM table_sample WHERE date <= (UNIX_TIMESTAMP() - (60 * 60 * 24 * 7)) GROUP BY id;
    +------+------------+
    | id   | MAX(date)  |
    +------+------------+
    |    1 | 1403862904 |
    |    2 | 1405174895 |
    |    3 | 1415266390 |
    +------+------------+
    3 rows in set (0.00 sec)