2014-12-01 38 views
0

我们的服务器很难运行此查询。我希望有人能够通过建议一种重写方式来获得相同的结果而不用子查询来帮助我。WHERE fieldname IS MIN(somedate)有没有办法在不使用子查询的情况下编写它?

子查询的目的是在where子句中使用min:我只想使用最早的co.created日期返回的结果。

所以我希望我能做到的是:

SELECT 
     my.data AS Account_ID, 
     co.ID AS User_ID, 
     def.def_medium, 
     co.created 
FROM (tables with associated joins) 
WHERE MIN(co.created) 

但我不能这样做,所以我想出了这个:

SELECT 
    my.data AS Account_ID, 
    co.ID AS User_ID, 
    def.def_medium, 
    co.created 
FROM 
    abc_emails.cid208 co 
INNER JOIN abc_emails.def208 def ON def.eid = co.id 
INNER JOIN abc_emails.my208 my ON my.eid = co.id AND my.my_id = 2765 
INNER JOIN (SELECT 
       my.data AS Account_ID, 
       MIN(created) AS created 
      FROM 
       abc_emails.my208 my 
      INNER JOIN abc_emails.cid208 co ON co.id = my.eid 
       WHERE my_id = 2765 
      GROUP BY Account_ID 
      ) b1 ON b1.Account_ID = my.data 
GROUP BY Account_ID, User_ID, def_medium 

但它已经运行了很长的时间,鉴于我对这台服务器的使用经验,我即将启动一个错误消息,告诉我它已超时。

是否有可能做我没有子查询做的事情?

+0

?但这不是一个真正的查询 – Strawberry 2014-12-01 23:04:54

+0

@Strawberry是怎么回事?你是指顶部的“查询”?这就是我只想写得更少,并且更加直截了当。我的目标是重写大​​查询减去必须使用b1 – 2014-12-01 23:06:47

+0

除非MySQL中有OLAP函数(RANK等),否则显式的子查询是必要的。使用OLAP功能,您可能会更光滑地做到这一点。 – 2014-12-01 23:10:22

回答

1

你查询你想使用:

SELECT 
     my.data AS Account_ID, 
     co.ID AS User_ID, 
     def.def_medium, 
     co.created 
FROM (tables with associated joins) 
WHERE MIN(co.created) 

实际上不是一个查询。大声朗读给自己。 “我想要这些数据,最低日期.....”。这是一个不完整的想法。你必须指定你想在WHERE子句中完成的事情。它应该是“我想这个数据,其中共表的最小日,是”

例如:如果你只想要最古老的项目

SELECT 
     my.data AS Account_ID, 
     co.ID AS User_ID, 
     def.def_medium, 
     co.created 
FROM (tables with associated joins) 
WHERE my.date > MIN(co.created) 

,要知道他们的ACCOUNT_ID,USER_ID, def_medium,您可以简单地按照创建日期递增排序,并获取所需结果的数量。

SELECT my.data AS Account_ID, 
     co.ID AS User_ID, 
     def.def_medium, 
     co.created 
FROM (tables with associated joins) 
ORDER BY co.created ASC 
LIMIT NumberOfResults 

您正在尝试查找最早的account_ID。如果你有10行,全部使用相同的ID,你想找到一个与MIN(co.created)。这将等同于MSSQL row_number分区:stackoverflow.com/questions/1895110/row-number-in-mysql

+0

Ach!当我看到“Top”时,我非常兴奋。但是,不,似乎不是MySQL的功能 – 2014-12-01 23:33:32

+0

抱歉,我正在开发自己的项目,然后回到这里,偶然写了MSSQL而不是MySQL。我正在编辑它时,我得到了downvoted:/ – DFTR 2014-12-01 23:36:12

+0

好,但是有没有办法在GROUP BY级别应用LIMIT,而不是整个查询? – 2014-12-01 23:39:43

相关问题