Sql 选择不带窗口函数的按结果分组的最小计数

Sql 选择不带窗口函数的按结果分组的最小计数,sql,group-by,aggregate-functions,h2,Sql,Group By,Aggregate Functions,H2,和往常一样,我们希望只处理一个sql请求。有一个发送尝试表: ID TIMESTAMP TASK_ID 1 2019-01-30 15:29:38 1 2 2019-01-30 15:29:39 1 3 2019-01-30 15:29:40 2 4 2019-01-30 15:29:41 3 任务表: ID EMAIL 1 boxOne@test.com 2 boxOne@test.com 3 boxTwo

和往常一样,我们希望只处理一个sql请求。有一个发送尝试表:

ID  TIMESTAMP            TASK_ID
1   2019-01-30 15:29:38  1
2   2019-01-30 15:29:39  1
3   2019-01-30 15:29:40  2
4   2019-01-30 15:29:41  3
任务表:

ID  EMAIL            
1   boxOne@test.com
2   boxOne@test.com
3   boxTwo@test.com
目的是为尝试次数最少的唯一电子邮件获取任务ID(在我们的示例中为2和3)。第一个问题是,我想使用不支持窗口函数的H2进行一些测试。问题二是多个任务可以有相同的电子邮件

我试过这个:

SELECT TASK.id, TASK.EMAIL, count(att.TASK_ID)
FROM TASK
JOIN ATTEMPTS on TASK.id = ATTEMPTS.TASK_ID
GROUP BY ATTEMPTS.TASK_ID
并产生这样的结果:

TASK.id  EMAIL            count(TASK.id)
1        boxOne@test.com  2
2        boxOne@test.com  1
3        boxTwo@test.com  1
但我需要对每封独特的电子邮件进行最少计数,如下所示:

TASK.id  EMAIL            count(TASK.id)
2        boxOne@test.com  1
3        boxTwo@test.com  1
min(count(TASK.id))对我无效结果始终为零


这是否可以在没有窗口函数的情况下完成,或者我应该接受临时结果并在代码中处理它?

您可以使用相关子查询进行尝试

select distinct t1.* from 
(
SELECT TASK.id, TASK.EMAIL, count(att.TASK_ID) cnt
FROM TASK
JOIN ATTEMPTS on TASK.id = ATTEMPTS.TASK_ID
group by TASK.id, TASK.EMAIL
) t1 where t1.cnt= (select min(cnt) from 
                       (SELECT TASK.id, TASK.EMAIL, count(att.TASK_ID) cnt
                       FROM TASK
                       JOIN ATTEMPTS on TASK.id = ATTEMPTS.TASK_ID
                        group by TASK.id, TASK.EMAIL
                       ) t2 where t2.EMAIL=t1.EMAIL)

尝试使用相关子查询,
具有
全部

SELECT t.id, t.email, count(a.task_ID) cnt
FROM task t
JOIN attempts a on t.id = a.task_ID
GROUP BY t.id, t.email
HAVING count(a.task_ID) <= ALL
(
    SELECT count(a.task_ID)
    FROM task t2
    JOIN attempts a on t2.id = a.task_ID
    WHERE t2.email = t.email
    GROUP BY t2.id
)
选择t.id、t.email、count(a.task\u id)cnt
来自任务t
在t.id=a.task\u id上加入尝试
按t.id、t.email分组

正在计数(a.task_ID)我认为您在
JOIN
sYep后面缺少
groupby
,错误:“task.ID”列必须在groupby列表中;SQL语句: