开发者

SQL query grouped parameter maximum

Let's say I had two columns in a database, col1 and col2. Column 2 is the time, Column 1 something. In my query, I want to do the following:

I want to SELECT * from my table and group the results by col1. However, I only want those entries where for the grouped col1 there is no value of col2 higher than a certain value. Meaning that, I only want those col1-s for which col2 does not exceed a certain value. If, for instance, I had three rows, as follows:

ROW1: col1 = val1, col2 = 3
ROW2: col1 = val1, col2 = 5
ROW3: col1 = val2, col2 = 3
ROW4: col1 = val2, col2 = 4

And I do not want the time for any of them to exceed 4, then, as a result, I would only wan开发者_运维问答t ROW3 or ROW4, which, does not matter, for col1 is the same and is grouped. But in rows 1 and 2, that are grouped by col1's value "val1", in one of them col2 DOES exceed 4, therefore, I do not want any of them.


 SELECT col1 FROM table GROUP BY col1 HAVING MAX(col2) <= 4

Because you want only the common value (col1) from the group, you can use GROUP BY. When you do a GROUP BY (aggregate) query, you can use the HAVING clause to apply a filter to the aggregated data set.


I am not use I got the point (my english is not good). I think sub-query is the best choice.

Note: this example should work with mySql ...

SELECT * 
FROM table 
WHERE col1 IN 
  (SELECT col1 FROM table WHERE col2 < 5 GROUP BY col1) 
ORDER BY col1


CREATE TABLE x (
  t TIME NOT NULL,
  v INT NOT NULL );

INSERT INTO x VALUES
    ('13:14:00', 24),
    ('13:14:00', 27),
    ('13:14:00', 29),
    ('17:12:00', 14),
    ('17:12:00', 20),
    ('17:12:00', 24);

SELECT t, MAX(v) AS mv FROM x
    GROUP BY t
    HAVING mv <= 25;

Or do I misunderstand the question?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜