我想知道是否有更好的方法来提取我需要的其他6个单独选择查询的数据集。
我有一个名为“events”的表,其中包含带有时间戳(日期),“活动”列(int 1处于活动状态)的事件以及“category”列(有6个类别,这是INT)和“ispaid”列(支付INT 1)。我需要按每个类别提取最早的有效付费活动。我有6个不同的选择查询,但我担心数据库越来越大,这可能会导致效率低下。
我想知道是否有更好的方法来做到这一点?
Events Table
------------
id INT
ispaid INT -- 1 is paid
category INT -- references another table but dont need to join as of now
active INT -- 1 is active
ts DATE -- event date
答案 0 :(得分:0)
那样的东西?
SELECT *
FROM events_tbl
WHERE events_tbl.active = 1 AND events_tbl.ispaid = 1
GROUP BY events_tbl.category
ORDER BY events_tbl.ts ASC
答案 1 :(得分:0)
如果我没有弄错,很可能你正在寻找这样的东西:
select e1.* from events e1
join (
select category, min(ts) oldestDate from events
where ispaid = 1 and active = 1
group by category
) e2 on e1.category = e2.category and e1.ts = e2.oldestDate
where e1.ispaid = 1 and e1.active = 1
这为每个类别提供已支付且处于活动状态的最早日期。然后将该数据连接回事件表。双where
子句应该比离开外部子句更快,因为在内部选择中处理的记录越少。