我有一张如下表
report_code | result_of_report
_______________________________
Rpx-34512-00| rejected
Rpx-34512-01| rejected
Rpx-34512-02| rejected
Rpt-22433-00| rejected
Rpt-22433-01| rejected
Rpt-22433-02| rejected
Rpt-22433-03| rejected
Rpt-22433-04| rejected
Rpt-22433-05| rejected
Rpt-22433-06| accepted
Rcs-34555-00| rejected
Rcs-34555-01| rejected
Rcs-34555-02| accepted
而这正是我想得到的:对于report_code
,我需要将substr(report_code, 4,5)
转换为5位报告代码,并查找尚未接受的报告。
第6次修订(接受哪一个版本并不重要。)22433
有一个接受的记录。所以它通过了。34555
在第二个版本中被接受。它也通过了。但是34512
没有任何接受的记录。我想列出所有像34512
一样的记录,但是要分组。所以我不想列出很多重复的行。为了更清楚,不需要列出34512
三次,一次就足够了。
首先我想解释一下我所做的尝试,我知道这不是正确的方法,但这对我来说是一个暂时的解决办法。
我运行了一个循环来获取where result_of_report='rejected'
,在这个循环中,我将5位数的report_code作为$code
,并在第一个循环中使用这个代码作为where(report_code, 'like', '$code) AND where(result_of_report, '=', 'accepted')
来查询每条记录。🤦♂️
正如你所看到的,这不是正确的方法,但我也不知道正确的方法。我愿意接受任何想法,使它在一个最有效的方式。不想使数百万循环迭代。感谢任何帮助提前。
2条答案
按热度按时间62o28rlo1#
可以按
SUBSTR(report_code, 5,5)
分组,并按如下方式使用条件聚集:HAVING COUNT(CASE WHEN result_of_report='accepted' THEN 1 END) = 0
用于确保至少有一行包含result_of_report='accepted'
。请注意,count函数只计算空值,因此不计算包含result_of_report<>'accepted
的行。参见demo。
cetgtptt2#
我们可以在这里使用
SUBSTRING_INDEX()
沿着聚合: