Найдите минимальное значение в столбце, сгруппировав более одного столбца в sql - PullRequest
0 голосов
/ 27 сентября 2019
+----+-------+-----------------------------+-------------------------+-------------------+-------------+
| Id | grade | shot_name                   | submitted_by_supervisor | version_submitted | submit_type |
+----+-------+-----------------------------+-------------------------+-------------------+-------------+
| 27 | A     | elx_reel01_scn1020_shot1720 | Salil Devji             | 33                | Fresh       |
| 27 | A     | elx_reel01_scn1020_shot1720 | Deepali                 | 34                | Fresh       |
| 37 | A     | elx_reel01_scn1030_shot3480 | Salil Devji             | 15                | Fresh       |
| 37 | A     | elx_reel01_scn1030_shot3480 | Salil Devji             | 20                | Fresh       |
| 7  | B     | elx_reel01_scn1010_shot1030 | Darshan                 | 4                 | Fresh       |
| 7  | B     | elx_reel01_scn1010_shot1030 | Varion                  | 6                 | Fresh       |
| 17 | B     | elx_reel01_scn1010_shot1140 | Varion                  | 17                | Fresh       |
| 17 | B     | elx_reel01_scn1010_shot1140 | Varion                  | 14                | Fresh       |
+----+-------+-----------------------------+-------------------------+-------------------+-------------+

У меня есть столбец (submit_type) для вставки нового столбца в это значение, установленное условием CASE, вот мой запрос sql:

SELECT   s.shot_id,
         s.shot_name ,
         isn.reviewer AS 'submitted_by_supervisor',
         isn.version  AS 'version_submitted',
         isn.grade    AS 'grade',
         CASE
                  WHEN isn.version = Min(isn.version) THEN 'FRESH'
                  ELSE 'Once Submitted'
         end AS 'submit_type'
FROM     viewd_elx.india_supe_note isn
JOIN     viewd_elx.shot s
ON       s.shot_id = isn.shot_id
JOIN     viewd_elx.team t
ON       isn.shot_id = t.shot_id
JOIN     viewd_elx.viewd_team vt
ON       isn.shot_id = vt.shot_id
WHERE    isn.promoted='Yes'
AND      isn.grade IN ('A',
                       'B')
GROUP BY isn.grade,
         s.shot_id,
         isn.version; 

упомянутый запрос дает значение «Fresh» во всех полях в (submit_type) столбец.что не правильно.

Что мне нужно, так это то, что я группирую столбец и нахожу MIN (значение) столбца,

Рабочий процесс: - оценка A => group (имя_кадра) =>min (version_submited) => установить 'Fresh' else 'После отправки' ​​в (submit_type)

В классе 'A' иметь то же имя shot_name, сгруппировать его (shot_name) и затем найти min (version_submited), если найдено минимальное значениезатем установите «свежее», в противном случае установите «один раз» значение в столбце (submit_type).Также для класса B, как класс A.

Мне нужен такой результат =>

+----+-------+-----------------------------+-------------------------+-------------------+----------------+
| Id | grade | shot_name                   | submitted_by_supervisor | version_submitted | submit_type    |
+----+-------+-----------------------------+-------------------------+-------------------+----------------+
| 27 | A     | elx_reel01_scn1020_shot1720 | Salil Devji             | 33                | Fresh          |
| 27 | A     | elx_reel01_scn1020_shot1720 | Deepali                 | 34                | Once Submitted |
| 37 | A     | elx_reel01_scn1030_shot3480 | Salil Devji             | 15                | Fresh          |
| 37 | A     | elx_reel01_scn1030_shot3480 | Salil Devji             | 20                | Once Submitted |
| 7  | B     | elx_reel01_scn1010_shot1030 | Darshan                 | 4                 | Fresh          |
| 7  | B     | elx_reel01_scn1010_shot1030 | Varion                  | 6                 | Once Submitted |
| 17 | B     | elx_reel01_scn1010_shot1140 | Varion                  | 17                | Once Submitted |
| 17 | B     | elx_reel01_scn1010_shot1140 | Varion                  | 14                | Fresh          |
+----+-------+-----------------------------+-------------------------+-------------------+----------------+

1 Ответ

0 голосов
/ 28 сентября 2019

Проблема здесь в том, что вы также группируете по полю isn.version и пытаетесь вычислить минимум того же поля в этой группе.Он просто вернет одно и то же значение, и поэтому все идут как «Fresh».Вам нужно будет определить минимальное значение isn.version для группы (grade, shot_id) отдельно в подзапросе ( Производная таблица ), а затем использовать его, чтобы проверить, является ли минимум или нет.

SELECT   s.shot_id,
         s.shot_name ,
         isn.reviewer AS submitted_by_supervisor,
         isn.version  AS version_submitted,
         isn.grade    AS grade,
         CASE
             WHEN isn.version = dt.min_version THEN 'FRESH'
             ELSE 'Once Submitted'
         END AS 'submit_type'
FROM     viewd_elx.india_supe_note isn
JOIN     viewd_elx.shot s
ON       s.shot_id = isn.shot_id
JOIN     viewd_elx.team t
ON       isn.shot_id = t.shot_id
JOIN     viewd_elx.viewd_team vt
ON       isn.shot_id = vt.shot_id
JOIN     (
           SELECT grade, 
                  shot_id, 
                  MIN(version) AS min_version 
           FROM viewd_elx.india_supe_note 
           WHERE promoted = 'YES' 
             AND grade IN ('A', 'B') 
           GROUP BY grade, 
                    shot_id
        ) AS dt 
ON       dt.grade = isn.grade 
         AND dt.shot_id = isn.shot_id 
WHERE    isn.promoted='Yes'
         AND isn.grade IN ('A','B')
GROUP BY s.shot_id, 
         s.shot_name, 
         isn.reviewer, 
         isn.version, 
         isn.grade, 
         dt.min_version 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...