Mysql 每个月限制行数?

Mysql 每个月限制行数?,mysql,sql,Mysql,Sql,我需要获取2012年12月至2014年11月之间的数据 每个月我只需要1500行 例如: SELECT * FROM data WHERE YEAR(submit_date) = 2012 AND MONTH(submit_date) = 12 limit 1500; SELECT * FROM data WHERE YEAR(submit_date) = 2013 AND MONTH(submit_date) = 1 limit 1500; SELECT * FROM data WHERE Y

我需要获取2012年12月至2014年11月之间的数据

每个月我只需要1500行

例如:

SELECT * FROM data WHERE YEAR(submit_date) = 2012 AND MONTH(submit_date) = 12 limit 1500;
SELECT * FROM data WHERE YEAR(submit_date) = 2013 AND MONTH(submit_date) = 1 limit 1500;
SELECT * FROM data WHERE YEAR(submit_date) = 2013 AND MONTH(submit_date) = 2 limit 1500;
SELECT * FROM data WHERE YEAR(submit_date) = 2013 AND MONTH(submit_date) = 3 limit 1500;
and until Nov 2014

有没有办法编写更小的SQL查询?

我想您正在寻找一个GROUPBY子句。我需要多了解一点才能给你一个明确的答案。但是下面的psedou查询可能会引导您走向正确的方向

SELECT *, SUM(some_field) 
FROM data
GROUP BY MONTH(submit_date)
或者,如果您只需要1500行,请选择按日期排序的前1500行

SELECT TOP(1500) *
FROM data
WHERE submit_date > '12-01-2012' AND submit_date < '11-01-2014'
ORDER BY MONTH(submit_date)

这里有一些选项列表:

IMHO最好的方法之一是使用行计数器:

set @num := 0, @type := '';

select id, name, submit_date,
  @num := if(@type = CONCAT(YEAR(submit_date), MONTH(submit_date)), @num + 1, 1) as row_number,
  @type := CONCAT(YEAR(submit_date), MONTH(submit_date)) as dummy
from data force index(IX_submit_date)
group by id, name, submit_date
having row_number <= 2;

您可以在这里进行测试:我对2个元素进行剪切,而不是对1500个元素进行剪切。您可以像使用它一样进行剪切,只需在查询之间添加一个并集即可。但您仍然必须每月创建一个查询

否则,您需要枚举返回的行。您需要先订购并枚举您的记录,然后您可以在该选择上进行选择以仅获取前X。不确定是否要包括上个月

SET @prev_date='';
SELECT * FROM (
SELECT IF(@prev_date=submit_date, @incr := @incr+1, @incr:=1) AS row_num, 
data.*, 
(@prev_date := submit_date) AS set_prev_date 
FROM data WHERE submit_date BETWEEN "2012-12-01" AND "2014-11-30" 
ORDER BY submit_date
) tmp WHERE row_num<1500;

这是行不通的,以我的SQL查询为例。每个月我只想要1500行。示例:其中YEARsubmit_date=2013,MONTHsubmit_date=3;例如,2013年1月的1500行,2013年2月至1月的1500行等等,直到2014年11月,我更新了我的帖子,以更直接地反映您的问题,但感谢过于严厉的否决票。您需要通过显示您的模式来完善您的问题。当你只给我一个样品时,你不能责怪我。对不起,我不是有意的。。。无论如何,我不认为TOP正在处理MySQL。您可能想查看标题,从每个组中选择解决您问题的前N行。简而言之,它建议在SQL中使用循环。谢谢!什么是强制索引提交日期?似乎要添加索引?是的,以提高DBMS的性能。您不需要它,但我建议您这样做。在您的SQL查询中,如何指定提交日期仅在2012年12月至2014年11月之间?您可以使用提交日期之间的位置执行此操作。对于数据集测试,我使用startdate 2012-05-01。。。使用2012-12-01谢谢。我有个问题。我不想对任何内容进行分组,应该显示重复的数据。
SET @prev_date='';
SELECT * FROM (
SELECT IF(@prev_date=submit_date, @incr := @incr+1, @incr:=1) AS row_num, 
data.*, 
(@prev_date := submit_date) AS set_prev_date 
FROM data WHERE submit_date BETWEEN "2012-12-01" AND "2014-11-30" 
ORDER BY submit_date
) tmp WHERE row_num<1500;