大家好,这是一个MySQL问题,它使用2个表联接的结果,有条件地评估它们并输出2个值。

这是数据库结构。

第一表gtpro包含

用户ID(列名ID)

样本/年​​数,即每年2、4或12次(列名labSamples__yr)

第二表结果包含

相同的用户ID(列名idgtpro)

样本日期的日期列(提供样本时)列名称日期

因此此查询返回所有ID的概述,以及该ID的最后一次提交样品的时间。

SELECT a.id, a.labSamples__yr, max(b.date) as ndate from gtpro as a
join labresults as b on a.id = b.idgtpro group by a.id


我要评估的条件看起来像这样。

a.labSamples__yr = 2 and ndate >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)
a.labSamples__yr = 4 and ndate >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH)
a.labSamples__yr = 12 and ndate >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)


因此,如果每年的样本数量为2,并且上次采样日期是6个月前,则我想知道该ID的样本ID和样本的最新日期。

我尝试使用CASE和IF语句,但不能完全正确。这是我的最新尝试。

select id, ndate,
case when (labSamples__yr = 2 and ndate <= DATE_SUB(CURDATE(), INTERVAL 6 MONTH))is true
then
(SELECT id from gtpro as a join labresults as b on a.id = b.idgtpro where
labSamples__yr = 2 and max(b.date) <= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)) end as id
from (SELECT a.id, a.labSamples__yr, max(b.date) as ndate from gtpro as a
join labresults as b on a.id = b.idgtpro group by a.id) d


这告诉我无效使用组功能。

迫切需要一点帮助

编辑我弄乱了我现在已修复的代码中的一些名称。

最佳答案

如果我正确理解了您的问题,则应该可以将条件放在where子句中:

SELECT a.id, a.labSamples__yr, max(b.date) as ndate
from gtpro a join
     labresults b
     on a.id = b.idgtpro
where (a.labSamples__yr = 2 and b.date >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)) or
      (a.labSamples__yr = 4 and b.date >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH)) or
      (a.labSamples__yr = 12 and b.date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
group by a.id;


可以解决您的语法问题。但是,如果您希望id具有最大日期,请尝试执行以下操作:

select a.labSamples__yr, max(b.date) as ndate,
       substring_index(group_concat(a.id order by b.date desc)) as maxid
from gtpro a join
     labresults b
     on a.id = b.idgtpro
where (a.labSamples__yr = 2 and b.date >= DATE_SUB(CURDATE(), INTERVAL 6 MONTH)) or
      (a.labSamples__yr = 4 and b.date >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH)) or
      (a.labSamples__yr = 12 and b.date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
group by a.labSamples__yr;


a.id放入group by不会给您最大的ID。

10-04 21:17
查看更多