Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql选择范围之间的最后x天_Php_Mysql - Fatal编程技术网

Php mysql选择范围之间的最后x天

Php mysql选择范围之间的最后x天,php,mysql,Php,Mysql,此查询返回从今天到90天前的所有选定值: SELECT max(cases_visits.created_dt), users_profiles.account_num, concat(cases.patient_first_initial, cases.patient_middle_initial, cases.patient_last_initial) AS initials, concat(users.first_name, ' ',users.last_name

此查询返回从今天到90天前的所有选定值:

 SELECT max(cases_visits.created_dt), users_profiles.account_num,
    concat(cases.patient_first_initial,
    cases.patient_middle_initial, cases.patient_last_initial) AS initials,
    concat(users.first_name, ' ',users.last_name) as name   
    FROM cases
    JOIN users_profiles
    ON users_profiles.user_id=cases.doctor_id
    JOIN cases_visits
    ON cases.id=cases_visits.case_id

    join users on users.id = cases.doctor_id

    WHERE cases_visits.patient_visit_type = 'NP' && cases_visits.created_dt BETWEEN     curdate() - INTERVAL 90 DAY AND SYSDATE()

    group by users.first_name
我想找到一个查询,它现在将选择完全相同的内容,但前提是前一个查询中不存在记录。示例:返回>90天前的记录,这些记录在过去90天内没有记录

我试过这么做:注意,查询中的2013-07-03是我第一次跑步的90天

    SELECT cases_visits.created_dt, users_profiles.account_num,
    concat(cases.patient_first_initial,
    cases.patient_middle_initial, cases.patient_last_initial) AS initials,
    concat(users.first_name, ' ',users.last_name) as name
    FROM cases
    JOIN users_profiles
    ON users_profiles.user_id=cases.doctor_id
   JOIN cases_visits
   ON cases.id=cases_visits.case_id
   join users on users.id = cases.doctor_id
   WHERE cases_visits.created_dt < '2013-07-03'
   group by users.first_name
我想这并没有给我提供正确的数据,因为我需要以某种方式排除过去90天中存在的记录

这就是我试图做的:在过去90天内选择一个a值=至“NP”的记录,然后我需要选择超过90天内没有NP值的记录,但这些记录应该与第一次查询完全唯一,即个人可能在90天内有一个案例,180天前有一个案例,我不需要他的记录

编辑:我忘了提到我尝试了这个查询,但在“in”附近出现了一个错误:

SELECT cases_visits.created_dt, users_profiles.account_num,
concat(cases.patient_first_initial,
cases.patient_middle_initial, cases.patient_last_initial) AS initials,
concat(users.first_name, ' ',users.last_name) as name    
FROM cases 
JOIN users_profiles
ON users_profiles.user_id=cases.doctor_id    
JOIN cases_visits
ON cases.id=cases_visits.case_id    
join users on users.id = cases.doctor_id    
WHERE cases_visits.created_dt < '2013-07-03'
and cases_visits.patient_visit_type = 'NP'    
and not in (select created_dt from cases_visits where  cases_visits.patient_visit_type = 'NP' && cases_visits.created_dt BETWEEN curdate() - INTERVAL 90 DAY AND SYSDATE())   
group by users.first_name

您可以使用子查询:

select * from table where ID NOT IN (select id from table where a=1);
这实际上是从表中选择与内部查询匹配的记录不匹配的记录

SELECT * FROM table WHERE cases_visits.created_dt < '2013-07-03'
AND case_visist.SOME_UNIQUE_ID NOT IN 
(SELECT case_visist.SOME_UNIQUE_ID FROM table WHERE cases_visits.patient_visit_type = 'NP' && cases_visits.created_dt BETWEEN     curdate() - INTERVAL 90 DAY AND SYSDATE() )

您可以使用NOT IN语句并输入SELECT语句来选择应排除的所有记录。A更多信息

这一组应该是同一位医生的就诊,相同的病例,但不同的就诊

SELECT max(cases_visits.created_dt), users_profiles.account_num,
  concat(cases.patient_first_initial,
  cases.patient_middle_initial, cases.patient_last_initial) AS initials,
  concat(users.first_name, ' ',users.last_name) as name   
FROM cases
JOIN users_profiles
  ON users_profiles.user_id=cases.doctor_id
JOIN cases_visits
  ON cases.id=cases_visits.case_id
JOIN users
  ON users.id = cases.doctor_id
WHERE cases_visits.patient_visit_type = 'NP' && cases_visits.created_dt <= curdate() - INTERVAL 90 DAY
  AND EXISTS(SELECT *
         FROM case_visits AS inside
         WHERE inside.case_id = cases.id
           AND inside.patient_visit_type = 'NP'
           AND inside.created_dt BETWEEN curdate() - INTERVAL 90 DAY AND SYSDATE())
GROUP BY account_num, initials, name

这似乎不起作用,我怀疑<'2013-07-03'是否像我认为的那样起作用。我似乎在您编辑的问题中使用“不在”时遇到了问题上次查询您忘了写要在“不在”中比较的列。你应该改变,而不是在和案例中访问。创建\u dt不在…有趣的是,你提到了,我刚刚意识到lol似乎起了作用,但我会检查重复的。如果解决了你的问题,如果你能接受这个答案,那就太好了。我仍然会收到原始90天内返回的记录。我尝试过各种组合,但无法让它们不被选中!错误是您需要一个介于和之间的字段名,而不是InnoGo。我犯了那个错误,但结果仍然是错误的:这是返回零结果我知道不是这样,但我认为你让我走上了正确的道路!有一个打字错误在那里被修复了,从一个案例到另一个案例,我看到了。它应该给你90天前发生的任何日期。