MySQL使用另一个查询中的结果

时间:2015-03-24 19:45:40

标签: mysql

我有2个查询:

SELECT m.* FROM (
    SELECT type, ROUND(
        COUNT(*) / ROUND(
            1000 / (SELECT COUNT(*) FROM types)
        )
    ) AS nth FROM data GROUP BY type
) AS m;

SELECT d.* FROM (
    SELECT * FROM data 
    WHERE type = @id 
    AND time BETWEEN @start_date AND @end_date
    ORDER BY time ASC
) d 
CROSS JOIN (select @i := 0) i
HAVING ( @i := @i + 1) MOD @nth = 1;

第一个查询返回类型" id"和" nth"我希望在秒查询中使用的值对;

我需要一些如何迭代在第二个查询中传递它们的第一个查询值,我该怎么做?

编辑:

我正在处理的表包含这样的日志

+----+------+---------+---------------------+
| id | type | counter |        time         |
+----+------+---------+---------------------+
|  1 |    1 |   10001 | 2014-04-06 22:20:21 |
|  2 |    2 |   12354 | 2014-04-06 22:20:21 |
|  3 |    3 |   12456 | 2014-04-06 22:20:21 |
|  4 |    1 |   10101 | 2014-04-06 22:20:21 |
|  5 |    2 |   12454 | 2014-04-06 22:20:21 |
|  6 |    4 |   12679 | 2014-04-06 22:20:21 |
| .. |   .. |      .. |                  .. |
+----+------+---------+---------------------+

它包含大量数据,我需要选择数据样本:假设我需要选择+ -1000条记录,例如7种类型,所以我需要为每种类型选择ROUND(1000/7)= 143行。让我们说类型1有1135135条记录,类型2有935135,对于每种类型,我只能选择143条记录,所以如果选择从乞讨到结束(@start_date =最小时间值,@ end_date =最大时间值),我需要从每个类型中以相等的间隔选择143行​​。例如,类型1是每个ROUND(1135135/143)= 7938记录,列表只包含类型1记录,类型2逻辑将是相同的ROUND(935135/143)= 6539nth

1 个答案:

答案 0 :(得分:0)

如果使用子查询无法完成此操作,则不能在不先存储查询的情况下使用另一个查询中的结果。据我所知,有两种方法可以做到这一点:

您可以使用临时表。在第一次查询期间,您必须在临时表中存储idnth值对的值。然后在第二个查询中,通过连接刚刚创建的临时表,再次绘制这些值。

使用局部变量创建存储过程。因此,在您的第一个查询中,您将存储idnth值对select ... into局部变量。然后在第二个查询中使用这些局部变量。