Mysql 通过将sql中的多个列分组来查找列中的最小值

Mysql 通过将sql中的多个列分组来查找列中的最小值,mysql,sql,mariadb,Mysql,Sql,Mariadb,我让列(submit_type)在该值中插入新列,这些值是按大小写条件设置的 以下是我的sql查询: +----+-------+-----------------------------+-------------------------+-------------------+-------------+ | Id | grade | shot_name | submitted_by_supervisor | version_submitted | sub

我让列(submit_type)在该值中插入新列,这些值是按大小写条件设置的 以下是我的sql查询:

+----+-------+-----------------------------+-------------------------+-------------------+-------------+
| 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)列的所有字段中提供“Fresh”值。这是不正确的

我需要的是,我正在对列进行分组,并找到列的最小值

工作流程:- A级=>组(快照名称)=>最小值(已提交版本)=>在中设置“新鲜”或“一旦提交”(提交类型)

在“A”级中,具有相同的炮点名称,将其分组(炮点名称),然后查找最小值(已提交版本),如果找到最小值,则在(提交类型)列中设置“新鲜”或设置“一旦提交”值。 同样适用于B级,如A级

我需要这样的结果=>

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; 

这里的问题是,您也在按
isn.version
字段进行分组,并试图计算该组中相同字段的最小值。它只会返回相同的值,这就是为什么所有的值都是“新鲜的”。您需要在子查询()中分别确定一组
(等级、快照id)
的最小
isn.version
值,然后使用该值检查是否为最小值

+----+-------+-----------------------------+-------------------------+-------------------+----------------+
| 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          |
+----+-------+-----------------------------+-------------------------+-------------------+----------------+

看:谢谢你的建议,现在我的问题是完美的。
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