这个让我喝酒所以我会喜欢一些帮助。
我有一张桌子:
act_Address, act_OrderID, act_Date
我正在尝试为我们发送的每个地址获取第一个act_Date。
这是我尝试过的,但现在已经运行了一个多小时,所以我认为这不会起作用......
SELECT c.act_Address,
(SELECT o.act_OrderID
FROM tbl_Activity o
WHERE c.act_Address = o.act_Address
ORDER BY o.act_Date
LIMIT 1) AS order_id,
(SELECT d.act_Date
FROM tbl_Activity d
WHERE c.act_Address = d.act_Address
ORDER BY d.act_Date
LIMIT 1) as order_date
FROM tbl_Activity c
我必须做一些非常错误的事情,看起来好像第一次约会地址会那么难,但我不是那么聪明。
答案 0 :(得分:1)
您的查询使用两个相关子查询来获取act_Date
和act_OrderID
值。每个子查询对tbl_Activity
的每个记录执行一次。
您可以使用:
SELECT act_Address, MIN(act_Date) AS fist_Date
FROM tbl_Activity
GROUP BY act_Address
获取每个地址的第一个日期。然后,您可以将上述查询用作派生表并连接回原始表以获取其余字段:
SELECT t1.act_Address, t1.act_OrderID, t1.act_date
FROM tbl_Activity AS t1
JOIN (
SELECT act_Address, MIN(act_Date) AS fist_Date
FROM tbl_Activity
GROUP BY act_Address
) AS t2 ON t1.act_Address = t2.act_Address AND t1.act_Date = t2.first_Date
我还建议在(act_Address, act_Date)
上放置综合索引。
答案 1 :(得分:0)
您可以通过GROUP BY
在子选择中执行此操作:
SELECT a.act_Address, a.act_OrderID, a.act_Date
FROM (
SELECT a2.act_Address addr, MIN(a2.act_Date) mindate FROM tbl_Activity a2
GROUP BY a2.act_Address
) g, tbl_Activity a
WHERE a.act_Address = g.addr AND a.act_Date = g.mindate;