mySQL Запрос Group By Max не дает правильного результата - PullRequest
1 голос
/ 25 апреля 2020

В mySQL У меня есть представление под названием riskcores:

SELECT * FROM Psag.riskscores WHERE AdmissionID = 52;

, которое дает:

AdmissionID RiskDate      RiskID RiskScore
'52',       '2020-04-22', '83',  '16'
'52',       '2020-04-15', '84',  '40'
'52',       '2020-04-08', '82',  '51'
'52',       '2020-04-01', '81',  '106'
'52',       '2020-03-25', '18',  '133'
'52',       '2020-03-18', '17',  '133'

Я добавил предложение WHERE для краткости данных.

Затем я запрашиваю это представление с помощью:

SELECT max(RiskDate) AS LatestDate, AdmissionID, RiskScore FROM riskscores
WHERE AdmissionID=52
GROUP BY AdmissionID;

Я получаю:

LatestDate    AdmissionID RiskScore
'2020-04-22', '52',       '133'

Я ожидаю, что RiskScore будет 16, а не 133, учитывая, что строка LatestDate значение '2020-04-22' имеет этот показатель.

Я уже установил

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Любая помощь с благодарностью получена

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Вы должны выбрать дату риска и затем соединить ее с таблицей, если существует более одной даты, связывающей вас, вы должны выбрать оценку в моем случае макс. Схема (MySQL v5.7)

CREATE TABLE riskscores (
  `AdmissionID` INTEGER,
  `RiskDate` date,
  `RiskID` INTEGER,
  `RiskScore`INTEGER
);

INSERT INTO riskscores
  (`AdmissionID`, `RiskDate`, `RiskID`, `RiskScore`)
VALUES
  ('52', '2020-04-22', '83', '16'),
  ('52', '2020-04-15', '84', '40'),
  ('52', '2020-04-08', '82', '51'),
  ('52', '2020-04-01', '81', '106'),
  ('52', '2020-03-25', '18', '133'),
  ('52', '2020-03-18', '17', '133');

Запрос № 1

SELECT 
MIN(LatestDate)
, r.AdmissionID
, MAX(RiskScore )
FROM riskscores r
INNER JOIN
(SELECT max(RiskDate) AS LatestDate
, AdmissionID
FROM riskscores
GROUP BY AdmissionID) rm
ON r.AdmissionID = rm.AdmissionID AND r.RiskDate = rm.LatestDate
WHERE r.AdmissionID=52
GROUP BY r. AdmissionID;

| MIN(LatestDate) | MAX(RiskScore ) | AdmissionID |
| --------------- | --------------- | ----------- |
| 2020-04-22      | 16              | 52          |

Просмотр на БД Fiddle

0 голосов
/ 25 апреля 2020

неагрегированные столбцы являются неопределенными, я получаю другой результат для вас, и ваша логика c имеет недостатки, вы должны выбрать строку, ГДЕ присутствует максимальная дата риска

select admissionid,riskdate,riskid,riskscore
from t
where admissionid = 52 and
        riskdate = (select max(riskdate) from t t1 where t1.admissionid = t.admissionid )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...