SQL查询限制组数

时间:2011-12-12 15:44:11

标签: sql

您好我有一个表格,其中包含以下字段'网站代码''日期''小时''数量',我想在查询中获取上周的所有输入数据。但是对于一个日期可能有多个输入,所以我必须先按照日期进行分组,然后在DESC中对这些组进行排序并取最后一个7.但是我使用的查询不能正常工作,因为它命令团体,但在有多个输入的日子里我只得到其中一个。 查询是:

SELECT `Quantity` , `Hour` , `Date`
FROM (
      SELECT *
      FROM `13_trans_coffee`
      WHERE `Site Code` =103713
      GROUP BY `Date`
      ORDER BY `Date` DESC
     )days
LIMIT 0 , 7

示例数据

site code  date            hour    quantity
103713     5/12/2011 0:00  21      10
103713     5/12/2011 0:00  20      11
103713     4/12/2011 0:00  14      10
103713     6/12/2011 0:00  20      10
103713     8/12/2011 0:00  23      10

注意我在2011年5月12日有2个输入,但查询结果是

quantity   hour    date
10         23      8/12/2011 0:00
10         20      6/12/2011 0:00
11         20      5/12/2011 0:00
10         14      4/12/2011 0:00

缺少一个输入。

5 个答案:

答案 0 :(得分:1)

下面的一个应该可以工作。

SELECT * 
FROM `13_trans_coffee`
WHERE  `Site Code` =103713 AND `Date` 
IN
(
SELECT `Date`
FROM `13_trans_coffee`
WHERE `Site Code` =103713
GROUP BY `Date`
ORDER BY `Date` DESC
LIMIT 0 , 7
) Z;

答案 1 :(得分:1)

如果您想要最后7个填充日期......

SELECT
  *
FROM
  `13_trans_coffee`
WHERE
  `Site Code` = 103713
  AND `Date` >= (SELECT MIN(`Date`) FROM (SELECT `Date` FROM `13_trans_coffee` WHERE `Site Code` = 103713 ORDER BY `DATE` DESC LIMIT 0,7))
ORDER BY
  `Date` DESC

或者...

SELECT
  *
FROM
  `13_trans_coffee`
INNER JOIN
  (SELECT `Site Code`, `Date` FROM `13_trans_coffee` WHERE `Site Code` = 103713 GROUP BY `Site Code`, `Date` ORDER BY `DATE` DESC LIMIT 0,7)  AS filter
  ON  filter.`Site Code` = `13_trans_coffee`.`Site Code`
  AND filter.`Date`      = `13_trans_coffee`.`Date`
ORDER BY
  `Date` DESC


如果你想要过去7天(加上今天)......

SELECT
  *
FROM
  `13_trans_coffee`
WHERE
  `Site Code` = 103713
  AND `Date` >= CURDATE() - 7
ORDER BY
  `Date` DESC

答案 2 :(得分:0)

您错误地使用了GROUP BY。完全忽略它你想要的东西。

每当GROUP BY Foo Foo时,输出中只显示唯一的{{1}},在您的情况下恰好是日期

答案 3 :(得分:0)

从SQL的角度来看,这是完全正确的。您甚至在查询中提到,当您按字段分组时,它会找到该字段的所有实例并将其概括为/ GROUP BY Date总结一下。

在您的样本数据中,您使用值5/12/2011(两次)进行分组。您不能指望仅使用group by date获得该日期的两个条目。

如果您希望获得date的两个条目,则需要按hour5/12分组,时间和日期的组合将为您提供两个条目(对于{{1}} 5/12)。请注意,如果两个元组之间的小时/分钟相同,则会产生一个元组。如果您想要多个日期实例,则根本不需要进行分组。

我能想到的另一件事就是为什么你的战场时间都设定为0点?如果您的实际值低至秒/分钟,那么您可以使用日期组来获取多个元组。

答案 4 :(得分:0)

您可以标记您正在使用的DBMS吗?我正在考虑分析函数,但我不知道你需要什么语法。