需要帮助构建SQL查询

时间:2014-11-27 15:28:02

标签: sql

通过具有max的lead_id(当field_number = 21然后是值结束时的情况)>选择来自wp_rg_lead_detail组的max(field_number = 7然后是value end)的值。 curdate()我已经尝试过我最好的阅读文档并在Google上搜索但我无法弄明白..

我需要构建一个查询,如果field_number 19的值为1且field_number 21的日期超过当前日期,则选择field_number 7的值。

这就是我目前所拥有的:

SELECT * FROM wp_rg_lead_detail WHERE field_number IN (7, 19) AND value = 1

但这只给了我field_number为19的行

修改 我需要获取field_number 7的值,其中field_number 19超过当前日期。可以存在多个in_nance,其中field_number是7(每个lead_id是不同的“人”,我需要field_number 7值)其中field_number 22的值1不再适用

EDIT2: 嘿伙计们谢谢!在您的帮助下,问题现在已经解决了。我现在使用的代码是(谢谢sgeddes):

SELECT value FROM wp_rg_lead_detail WHERE field_number = 7 AND EXISTS (SELECT field_number, value FROM wp_rg_lead_detail WHERE field_number = 21 AND value > CURDATE())

3 个答案:

答案 0 :(得分:0)

这应该可以解决问题

SELECT o.value
FROM wp_rg_lead_detail o
JOIN wp_rg_lead_detail t1
    ON t1.lead_id = o.lead_id
    AND t1.form_id = o.form_id
    AND t1.field_number = 19
    AND t1.value = 1
JOIN wp_rg_lead_detail t2
    ON t2.lead_id = o.lead_id
    AND t2.form_id = o.form_Id
    AND t2.field_number = 21
    AND t2.value > CONVERT(char(10), GetDate(),126)
WHERE o.field_number = 7
  • 它从您的表中选择值;
  • 自己加入,其中字段编号为19,其值为1;
  • 执行相同的联接,其中字段编号为21且日期已过去;
  • 内部联接将限制此项仅显示相关详细信息。

修改 感谢Hans提醒我忘记了Where子句:)

答案 1 :(得分:0)

您可以将group bymaxcase一起使用。我假设唯一群组是lead_idform_id

select max(case when field_number = 7 then value end) value
from wp_rg_lead_detail
group by lead_id, form_id
having max(case when field_number = 19 then value end) = 1 
    and max(case when field_number = 21 then value end) > curdate()

最后一部分取决于你使用的是哪个数据库(curdate是mysql,getdate()是sql server),但是这应该给你一般的想法。您可能还需要将值转换为日期。

答案 2 :(得分:0)

您可以使用

WHERE EXISTS ( subquery );

条件

例如(据我所知):

SELECT * 
FROM wp_rg_lead_detail 
WHERE field_number IN (7,19) 
AND EXISTS (
           SELECT * 
           FROM wp_rg_lead_detail
           WHERE field_number = 19 AND value = 1)