gpt4 book ai didi

php - SQL 查询包含一个范围内的到期日期,但如果它们有另一个相同类型的实例则排除

转载 作者:可可西里 更新时间:2023-11-01 13:28:31 26 4
gpt4 key购买 nike

这是详细模式下的问题。我在认证表上有认证实例,它们都有一个类型和一个与之关联的学生。这就是我想要发生的事情,我想提取所有到期日期在日期范围内(现在到 1 年)的证书。如果他们符合该参数的条件,那很好,但是如果他们的证书到期时间大于该范围,而当它与属于该范围内的证书的类型相同时,我想排除学生——他们不需要在那个报告。这是我的第一个查询:

SELECT s.student_id, s.fname, s.address1, s.lname, s.zip, s.state, s.city, s.student_type
FROM students s, certifications c
WHERE ( s.student_id = c.student_id )
AND s.status='A'
AND s.student_type != 'B'
AND s.student_type != 'D'
AND s.student_type != 'E'
AND s.student_type != 'W'
AND s.student_type != 'T'
AND s.student_type != 'I'
AND c.expiration >= CURDATE() AND c.expiration <= DATE_ADD(NOW(), INTERVAL 1 YEAR)
GROUP BY s.student_id
ORDER BY s.lname, s.fname

然后实际得到的sql是根据前面的sql语句得到证书的信息:

SELECT c.cert_num, c.date, expiration, ct.name, ct.cert_type, c.cert_id, c.student_id
FROM certifications c, cert_type ct
WHERE student_id = '{$Row['student_id']}'
AND ct.cert_type = c.cert_type
ORDER BY ct.name ASC, expiration DESC

总而言之,我遇到的问题是,如果学生的证书有效期在一年之内,并且他们有另一个同类型证书的有效期大于该范围,学生就会出现。那可不行。

有没有一种方法可以检查以确保某个证书类型在日期范围内,如果是,则确保它们没有大于该范围的相同类型的证书?它不关心是否需要另一个 sql 查询。

最佳答案

我可能过度简化了问题,但您不能只获取任何学生/类型组合的最长到期日期吗?例如

SELECT  s.student_id, 
s.fname,
s.address1,
s.lname,
s.zip,
s.state,
s.city,
s.student_type
FROM Students s
INNER JOIN
( SELECT c.student_ID,
c.Cert_Type,
MAX(Expiration) AS Expiration
FROM Certifications c
GROUP BY c.student_ID, c.Cert_Type
) c
ON s.Student_ID = c.Student_ID
WHERE s.Student_Type NOT IN ('B', 'D', 'E', 'W', 'T', 'I')
AND c.expiration >= CURDATE() AND c.expiration <= DATE_ADD(NOW(), INTERVAL 1 YEAR)
GROUP BY s.student_id, s.fname, s.address1, s.lname, s.zip, s.state, s.city, s.student_type

关于php - SQL 查询包含一个范围内的到期日期,但如果它们有另一个相同类型的实例则排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13126307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com