Hossein
Hossein

Reputation: 4549

How to select latest records less than value

I have a table named conductor. I want to select latest records that date less than my_value.

+----+-----------+------+
| id | program   | date |
+----+-----------+------+
| 1  | program 1 | 1    |
| 2  | program 1 | 3    |
| 3  | program 2 | 3    |
| 4  | program 1 | 5    |
| 5  | program 1 | 7    |
+----+-----------+------+

If we consider my_value is 4 then output will be:

+----+-----------+------+
| id | program   | date |
+----+-----------+------+
| 2  | program 1 | 3    |
| 3  | program 2 | 3    |
+----+-----------+------+

How can I select records by SQL?

Upvotes: 1

Views: 2122

Answers (4)

Mudassir Hasan
Mudassir Hasan

Reputation: 28741

SELECT * FROM Conductor
WHERE `date` = (SELECT max(`date`) FROM Conductor
                WHERE `date` < myvalue )

Upvotes: 1

Strawberry
Strawberry

Reputation: 33935

 DROP TABLE IF EXISTS my_table;

 CREATE TABLE my_table
 (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
 ,program   VARCHAR(12) NOT NULL
 ,date INT NOT NULL
 );

 INSERT INTO my_table VALUES
 (1  ,'program 1',1),
 (2  ,'program 1',3),
 (3  ,'program 2',3),
 (4  ,'program 1',5),
 (5  ,'program 1',7);

 SELECT * FROM my_table;
 +----+-----------+------+
 | id | program   | date |
 +----+-----------+------+
 |  1 | program 1 |    1 |
 |  2 | program 1 |    3 |
 |  3 | program 2 |    3 |
 |  4 | program 1 |    5 |
 |  5 | program 1 |    7 |
 +----+-----------+------+

 SELECT x.* 
   FROM my_table x 
   JOIN 
      ( SELECT program
             , MAX(date) max_date 
          FROM my_table 
         WHERE date < 4 
         GROUP 
            BY program
      ) y 
     ON y.program = x.program 
    AND y.max_date = x.date;
 +----+-----------+------+
 | id | program   | date |
 +----+-----------+------+
 |  2 | program 1 |    3 |
 |  3 | program 2 |    3 |
 +----+-----------+------+

Upvotes: 0

Anant_00
Anant_00

Reputation: 143

SELECT * FROM Conductor
WHERE date IN (SELECT max(date) FROM Conductor
                WHERE date < myvalue )

Upvotes: 0

Neels
Neels

Reputation: 2543

You can try a query like:

SELECT * FROM conductor
WHERE date = (SELECT date FROM conductor 
              WHERE date < my_value ORDER BY DESC limit 1);

This should give you what you are expecting!

Upvotes: 0

Related Questions