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

从具有不同顺序的表中选择列

  •  1
  • Bharat  · 技术社区  · 2 年前

    我有一位餐桌顾客。该表有列 cust_id , member , date 。cust_id是主键(自动递增),成员可以有1或0,日期包含时间戳。我想在MySQL上运行一个查询,让我选择成员为1、按日期排序的cust_id,然后选择成员为0、按cust_id排序的cust_id。两者都应该按降序排列(即从最新或最大到最旧或最小)。我尝试过UNION,但SQL给出了错误,因为列日期不存在。

    SELECT `cust_id` FROM `customer` WHERE `member` = 1 ORDER BY `date` DESC
    SELECT `cust_id` FROM `customer` WHERE `member` = 0 ORDER BY `cust_id` DESC
    

    我想合并这两个查询的结果。

    我期待这样的输出:

    cust_id 成员 日期
    25 1. 2022-05-01 22:22:22
    30 1. 2021-01-11 05:23:11
    50 0 2023-09-01 22:22:22
    49 0 2023-08-21 20:20:20
    46 0 2023-08-20 19:20:21

    但我想我错过了什么。

    请帮忙。

    2 回复  |  直到 2 年前
        1
  •  1
  •   nbk    2 年前

    你可以在MySQL中使用parthesis来让它工作

    CREATE tABLe customer ( `cust_id` int,`member` int,`date` datetime)
    
    INSERT INTO customer
        (`cust_id`, `member`, `date`)
    VALUES
        (25, 1, '2022-05-01 22:22:22'),
        (30, 1, '2021-01-11 05:23:11'),
          (31, 1, '2022-05-01 21:22:22'),
        (32, 1, '2021-01-11 06:23:11'),
        (50, 0, '2023-09-01 22:22:22'),
        (49, 0, '2023-08-21 20:20:20'),
        (46, 0, '2023-08-20 19:20:21'),
          (50, 0, '2023-09-01 22:22:22'),
        (51, 0, '2023-08-21 20:20:20'),
        (52, 0, '2023-08-20 19:20:21')
    ;
    
    
    Records: 10  Duplicates: 0  Warnings: 0
    
    (SELECT `cust_id`,`member`,`date` FROM `customer` WHERE `member` = 1 ORDER BY `date` DESC LIMIT 10000000)
    UNION 
    (SELECT `cust_id`,`member`,`date` FROM `customer` WHERE `member` = 0 ORDER BY `cust_id` DESC  LIMIT 10000000)
    
    cust_id 成员 日期
    25 1. 2022-05-01 22:22:22
    31 1. 2022-05-01 21:22:22
    32 1. 2021-01-11 06:23:11
    30 1. 2021-01-11 05:23:11
    52 0 2023-08-20 19:20:21
    51 0 2023-08-21 20:20:20
    50 0 2023-09-01 22:22:22
    49 0 2023-08-21 20:20:20
    46 0 2023-08-20 19:20:21

    fiddle

        2
  •  0
  •   ota    2 年前

    全选并按成员和日期排序:

    SELECT cust_id FROM customer ORDER BY member DESC, date DESC