简体   繁体   English

MAX()函数未按预期工作

[英]MAX() Function not working as expected

I've created sqlfiddle to try and get my head around this http://sqlfiddle.com/#!2/21e72/1 我创建了sqlfiddle尝试尝试绕过此http://sqlfiddle.com/#!2/21e72/1

In the query, I have put a max() on the compiled_date column but the recommendation column is still coming through incorrect - I'm assuming that a select statement will need to be inserted on line 3 somehow? 在查询中,我已将max()放在了compiled_date列上,但推荐列仍遇到不正确的情况-我假设需要以某种方式将select语句插入第3行?

I've tried the examples provided by the commenters below but I think I just need to understand this from a basic query to begin with. 我已经尝试了以下评论者提供的示例,但我想我只需要从基本查询开始就可以理解这一点。

As others have pointed out, the issue is that some of the select columns are neither aggregated nor used in the group by clause. 正如其他人指出的那样,问题在于某些选择列既未汇总,也未在group by子句中使用。 Most DBMSs won't allow this at all, but MySQL is a little relaxed on some of the standards... 大多数DBMS根本不允许这样做,但是MySQL在某些标准上有点放松...

So, you need to first find the max(compiled_date) for each case, then find the recommendation that goes with it. 因此,您需要首先找到每种情况的max(compiled_date) ,然后再找到相应的建议。

select r.case_number, r.compiled_date, r.recommendation
from reporting r
  join (
    SELECT case_number, max(compiled_date) as lastDate
    from reporting
    group by case_number
  ) s on r.case_number=s.case_number
      and r.compiled_date=s.lastDate

Thank you for providing sqlFiddle. 感谢您提供sqlFiddle。 But only reporting data is given. 但是只给出报告数据。 we highly appreciate if you give us sample data of whole tables. 如果您给我们提供整个表格的样本数据,我们将不胜感激。

Anyway, Could you try this? 无论如何,您能尝试一下吗?

SELECT
    `case`.number,
    staff.staff_name AS ``case` owner`,
    client.client_name,
    `case`.address,
    x.mx_date,
    report.recommendation
FROM
    `case` INNER JOIN (
        SELECT case_number, MAX(compiled_date) as mx_date
        FROM report
        GROUP BY case_number
    ) x ON x.case_number = `case`.number
    INNER JOIN report ON x.case_number = report.case_number AND report.compiled_date = x.mx_date
    INNER JOIN client ON `case`.client_number = client.client_number
    INNER JOIN staff ON `case`.staff_number = staff.staff_number
WHERE
    `case`.active = 1
    AND staff.staff_name = 'bob'
ORDER BY
    `case`.number ASC;

Check below query: 检查以下查询:

SELECT c.number, s.staff_name AS `case owner`, cl.client_name, 
       c.address, MAX(r.compiled_date), r.recommendation
FROM case c
INNER JOIN (SELECT r.case_number, r.compiled_date, r.recommendation 
            FROM report r ORDER BY r.case_number, r.compiled_date DESC
           ) r ON r.case_number = c.number
INNER JOIN client cl ON c.client_number = cl.client_number
INNER JOIN staff s ON c.staff_number = s.staff_number
WHERE c.active = 1 AND s.staff_name = 'bob'
GROUP BY c.number
ORDER BY c.number ASC
SELECT
case.number,
staff.staff_name AS `case owner`,
client.client_name,
case.address,
(select MAX(compiled_date)from report where case_number=case.number),
report.recommendation
FROM
case
INNER JOIN report ON report.case_number = case.number
INNER JOIN client ON case.client_number = client.client_number
INNER JOIN staff ON case.staff_number = staff.staff_number
WHERE
case.active = 1 AND
staff.staff_name = 'bob'
GROUP BY
case.number
ORDER BY
case.number ASC

try this 尝试这个

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM