2011-09-09 43 views
0

有两个表格,一个是“用户”,另一个是“筛选”用户可以在筛选中有多个记录。我需要比较一个多重筛选记录中最早记录的日期,并且看看它是否从现在起30天。我怎么做?如何比较多个记录的第一个值? (MySQL)

我收到了这样的查询。我想要特定用户的第一个screen.date并进行比较,以确定它是否从现在起30天。我以这种方式放置AND screening.date + INTERVAL 30 DAY> NOW(),但它不能正确工作。它比较用户的多次放映的日期。但我只想要第一个。

SELECT users.id AS user_id, users.first_name, users.last_name, clients.name AS client, 
users.social_security_number AS ssn, users.hiredate, 
screening.id AS screening_id, screening.date AS screening_date, screening.maileddate AS screening_maileddate 
FROM users 
INNER JOIN clients 
ON(
    users.client_id = clients.id 
    AND users.client_id = '1879' 
    ) 
LEFT JOIN screening 
ON(
    users.id = screening.user_id 
) 
WHERE 
(users.hiredate BETWEEN '2011-01-01' AND '2011-08-14' 
OR users.hiredate IS NULL) 
AND users.id IN(  
SELECT users.id from users 
INNER JOIN screening sall 
ON(
    sall.user_id = users.id 
) 
INNER JOIN screening s1 
ON(
    s1.user_id = users.id 

    AND s1.date BETWEEN '2011-05-15' AND '2011-11-15' 
) 
INNER JOIN screening s2 
ON(
    s2.user_id = users.id 

    AND s2.date BETWEEN '2011-05-15' AND '2011-11-15' 
) 
INNER JOIN screening s3 
ON(
    s3.user_id = users.id 

    AND s3.date BETWEEN '2011-05-15' AND '2011-11-15' 
) 
INNER JOIN screening s4 
ON(
    s4.user_id = users.id 

    AND s4.date BETWEEN '2011-05-15' AND '2011-11-15' 
) 
INNER JOIN screening s5 
ON(
    s5.user_id = users.id 

    AND s5.date BETWEEN '2011-05-15' AND '2011-11-15' 
) 
INNER JOIN screening s6 
ON(
    s6.user_id = users.id 

    AND s6.date BETWEEN '2011-05-15' AND '2011-11-15' 
) 
WHERE (s1.cholesterol IS NOT NULL 
AND s2.ldl IS NOT NULL 
AND s3.triglycerides IS NOT NULL) 
AND (s4.glucose IS NOT NULL 
OR s5.ha1c IS NOT NULL) 
) 
AND screening.date + INTERVAL 30 DAY > NOW() 
GROUP BY users.id 
+0

可能重复[如何获得多个记录的第一个值? (MySQL)](http://stackoverflow.com/questions/7353283/how-do-i-get-the-first-value-of-multiple-records-mysql) –

回答

0

从数据库中简单地获取记录并将比较和/或其他计算留给编程逻辑更加明智。它比你的资源更有效率,比这样的大型查询更具可读性和可维护性。

+0

我同意你说的话。但是我是一个新的程序员,所以把所有东西留给编程逻辑对我来说并不容易。这就是为什么我想在查询中完成它 –

+0

@user您使用什么编程语言?你可以在这里发布'code'的相关部分吗?那么可能有人(在这里)可以帮助你以更高效的方式前进。 – check123

0

什么check123说,但具体而言,尝试使用此查询(或类似),然后使用您的应用程序来查看返回的结果是否超过30天前。

SELECT users.id AS user_id, users.first_name, users.last_name, clients.name AS client, 
     users.social_security_number AS ssn, users.hiredate, screening.id AS screening_id, 
     screening.date AS screening_date, screening.maileddate AS screening_maileddate 
FROM users 
INNER JOIN clients ON(users.client_id = clients.id AND users.client_id = '1879') 
LEFT JOIN screening ON(users.id = screening.user_id) 
ORDER BY screening_date 
LIMIT 1 
相关问题