我有两个查询,他们的出来是不同的,但我想要的是如下:
我有两张桌子:
Subject:
-subject_id (Primary key)
-about
-details
feedback:
-id (Primary Key)
-subject_id (Foreign key)
-rating
-DateAndTime
以下是查询及其结果:
SELECT distinct about, details, subject.subject_id, round(AVG(rating),2) as Rating,
Max(DATE_FORMAT( DateAndTime, '%d-%m-%Y' )) as Date,
Max(TIME_FORMAT( DateAndTime, '%h:%i:%s' )) as Time
FROM `subject` , `feedback`
WHERE subject.Subject_ID = feedback.Subject_ID
GROUP BY about,details,subject_id
ORDER BY DateAndTime DESC
此查询中的输出是唯一的,详细信息,subject_id列和平均评级。但问题在于日期和时间。我想要为该结果输入的最后日期和时间,结果也包含但不是有序的。
以上查询的图片
当我执行此查询时,它会提供完美的订单但评级会被修改
SELECT distinct about, details, subject.subject_id, round(AVG(rating),2) as Rating,
Max(DATE_FORMAT( DateAndTime, '%d-%m-%Y' )) as Date,
Max(TIME_FORMAT( DateAndTime, '%h:%i:%s' )) as Time
FROM `subject` , `feedback`
WHERE subject.Subject_ID = feedback.Subject_ID
GROUP BY about,details,subject_id,dateandtime
ORDER BY DateAndTime,Time DESC
区别仅在于分组条款。
所以任何人都可以帮助我。
答案 0 :(得分:0)
当您将日期设置为日期格式时,MAX()
将选择日期编号最高的日期,这不一定是最近的日期。例如,26-10-2016
高于21-11-2017
,因为26
高于21
。要按格式化日期订购,必须采用%Y-%m-%d
格式。
当您选择格式化后的最长时间时,您将获得完全忽略日期的最长时间。
不是将MAX()
应用于DATE_FORMAT
的结果,而是获取最大值DateAndTime
并根据需要格式化:
DATE_FORMAT(MAX(DateAndTime, '%d-%m=%Y')) AS Date,
DATE_FORMAT(MAX(DateAndTime, '%h:%i:%s')) AS Time
要按显示的日期和时间对结果进行排序,请使用:
ORDER BY STR_TO_DATE('%d-%m-%Y %h:%i:%s', CONCAT(Date, ' ', Time)) DESC
你不应该在DateAndTime
中拥有GROUP BY
,因为那时你每次都会得到一个单独的组。您需要将所有时间组合到一个组中,以便随后使用MAX(DateAndTime)
获取最后一个值。