这是我的桌子。现在我必须找出每个user_id的最新company_name。事实是,如果exp_to为null,那么它将被认为是最新的,或者如果exp_from和amp; exp_to不为null然后我必须使用exp_to日期找到最新的公司名称。请注意,user_id在给定表中多次出现。
这就是我想要的:
id | company_name
-----------------
14 | Deltalife Insurance Company Ltd.
1 | Orbital Software
25 | MMTV
18 | Noakhali Science & Technology University
等等......
我怎么能用mysql做到这一点?提前致谢。
答案 0 :(得分:1)
根据您提供的任何信息,我可以找出此查询
Select * from Table_Name where exp_to = null || exp_to = (select max(exp_to) from Table_Name)
答案 1 :(得分:1)
这是结构化查询语言的结构化部分的应用程序。
首先,您需要知道每个user_id
的最新日期。该子查询产生该信息:
SELECT user_id,
MAX(IFNULL(NOW(), exp_to) exp_to
FROM mytable
GROUP BY user_id
然后,您需要使用该结果查找公司,方法是将其加入您的表格。
SELECT a.user_id, a.company_name
FROM mytable a
JOIN (
SELECT user_id,
MAX(IFNULL(NOW(), exp_to) exp_to
FROM mytable
GROUP BY user_id
) b ON a.user_id = b.user_id AND IFNULL(NOW(), a.exp_to) = b.exp_to
这应该找到与每个exp_to
的最新user_id
相关联的公司名称。 IFNULL(NOW(),exp_to)
实现了您的要求,即将NULL日期视为当前时间。
此查询是一般查询模式的示例:查找具有特定值的极值(最大值,最小值)的行。
答案 2 :(得分:1)
这是非常简单的聚合问题。您可能已经想到,null会导致SQL中的some interesting behavior。您可以使用CASE WHEN检查null并替换为其他值。
在你的情况下:
SELECT
data.*
FROM (
SELECT
*,
CASE WHEN exp_to is null THEN 1 ELSE exp_to END max_date
FROM your_table
) data
INNER JOIN (
SELECT
user_id,
CASE WHEN MAX(exp_to is null) = 1 THEN 1 ELSE MAX(exp_to) END max_date
FROM
your_table
GROUP BY user_id
) j
ON data.user_id = j.user_id AND data.max_date = j.max_date
希望这有帮助,祝你好运!