【问题标题】:SQL: How to use GROUP BY and ORDER BY together in one querySQL:如何在一个查询中同时使用 GROUP BY 和 ORDER BY
【发布时间】:2022-01-15 21:39:51
【问题描述】:

我正在从我的数据库中获取座位预订,并希望获取最新条目并将其与 Patient_reg_no 分组,这是我的代码,

SELECT * 
FROM seat_booking 
WHERE patient_reg_no like '" . $_POST["keyword"] . "%' and is_active = 'Y' 
GROUP BY patient_reg_no 
ORDER BY booking_id DESC LIMIT 20

【问题讨论】:

  • 您能详细说明一下吗?您需要哪些列?您想检索每个客户的最新条目吗?
  • 当您使用GROUP BY 时,您还应该为您选择的不属于GROUP BY 语句的每一列使用聚合函数。参见例如mysqltutorial.org/mysql-group-by.aspx
  • 您的问题是什么?问题?错误或不希望的结果?详情请edit
  • 像什么? @Parfait
  • 您在标题中提出一个问题,并在正文中尝试查询,该查询执行问题所要求的。您面临的问题是什么?请使用详细信息编辑帖子(不在 cmets 中)。

标签: mysql sql


【解决方案1】:

请试试这个

select patient_reg_no ,booking_id 
from
(SELECT patient_reg_no , booking_id 
,rank() over (partiotion by patient_reg_no  order by booking_id  desc) rank
FROM seat_booking 
WHERE patient_reg_no like '" . $_POST["keyword"] . "%' and is_active = 'Y' 
)a
where rank=1

【讨论】:

    【解决方案2】:

    问题是您选择使用通配符来选择列:*。数据库不知道要根据哪些列进行分组,因为您选择了所有列。我添加了一个表别名来分配列名的域。如果您决定加入另一个表,这将有很大帮助。

    SELECT sb.patient_reg_no, sb.booking_id
    FROM seat_booking sb
    WHERE sb.patient_reg_no like '" . $_POST["keyword"] . "%' and sb.is_active = 'Y' 
    GROUP BY sb.patient_reg_no
    ORDER BY sb.booking_id DESC;
    -- LIMIT 20;  -- Remove the limit until the results are correct
    

    【讨论】:

    • 感谢它的工作原理!
    • @Samey,请勾选您认为最适合解决方案的答案。
    猜你喜欢
    • 1970-01-01
    • 2019-01-21
    • 2021-11-17
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多