请更新标题,因为我没有任何合适的标题并删除此评论;)
我有一个包含以下数据的表:
ID assigned_to foreign_id PURCHASE_DATE
1 5
1
2014年1月1日
4 7
1
2014年1月9日
6 2
1
2014-01-10
8 9
1
2014年1月13日
12 9
2
2014年1月13日
18 9
3
2014年1月13日
如果`assigned_to = 7,
存在行,我想从foreign_id=1
和assigned_to=7
的此数据中检索行
其他行为purchase_date
的最新foreign_id=1
,不论assign_to = 7 ;
结果集:
ID assigned_to foreign_id PURCHASE_DATE
案例I:IF ASSIGNED_TO = 7 AND FOREIGN_ID = 1
4 7
1
2014年1月9日
-------------------------------------------------- ------------------------------
案例2:IF ASSIGNED_TO = 7 AND FOREIGN_ID = 2
12 9
2
2014年1月13日
请提供MySQL查询以获取要求。无论我的想法是什么,或者我的SQL知识;)我得到的行只有assigned_to = 7,或者如果assigned_to = X [x =其他已分配的用户和其他其他foreign_ids]则不存在于表中。
答案 0 :(得分:1)
你可以使用case ...在mysql中使用count()函数。
答案 1 :(得分:1)
您可以使用下面的简单IF ELSE
IF(EXISTS(SELECT * FROM test where assigned_to = 7 AND foreign_id=1))
BEGIN
SELECT * FROM test
WHERE foreign_id=1 AND assigned_to = 7
END
ELSE
SELECT * FROM test WHERE foreign_id=1 AND purchase_date = (select MAX(purchase_date) from test)
答案 2 :(得分:1)
将foreign_id
上的过滤器放入WHERE
子句,将assigned_to
上的过滤器放入ORDER BY
子句,并添加LIMIT 1,如下所示:
SELECT
id,
assigned_to,
foreign_id,
purchase_date
FROM
atable
WHERE
foreign_id = @foreign_id
ORDER BY
assigned_to = @assigned_to DESC,
purchase_date DESC
LIMIT 1
;
其中@foreign_id
和@assigned_to
是查询参数。
查询将首先找到与@foreign_id
匹配的所有行。然后它将它们分成两个子集:
1)与@assigned_to
匹配的行;
2)所有其他人。
@assigned_to
子集将放在另一个子集之前,并且两者将按purchase_date
的降序进行额外排序。最后,将返回已排序数据集的第一行,其余部分将被丢弃。
因此,查询会返回最新的@foreign_id
/ @assigned_to
匹配(如果存在),或者仅返回最新的@foreign_id
匹配。
答案 3 :(得分:0)
您好Aakash尝试此查询...
select * from (
select * from tbl_purchase where foreign_id=1 AND assigned_to = 7
union
(select * from tbl_purchase where foreign_id=1 order by purchase_date desc limit 1)
) as t limit 1