I got table with ID, TYPE, NUMBER, DATE
example, without date:
1 a 15
2 c 10
3 b 11
4 b 14
5 a 19
6 c 1
7 b 14
8 b 7
SELECT 1:
I want to select 1 last record of each type ... so result will be:
5 a 19 15.2.2014 16:00
8 b 7 15.2.2014 16:50
6 c 1 15.2.2014 17:00
NOW it is 15.2.2014 17:01
SELECT 2:
I want to select from "SELECT 1" maximum from each last type last 60 minutes (try to not to do it as "select from (SELECT 1)", result will be:
8 b 7 15.2.2014 16:50
can someone help me ?
You can do the first with this exists
clause:
select t.*
from table t
where not exists (select 1
from table t2
where t2.type = t.type and t2.date > t.date
);
The maximum in the last 60 minutes is the same as the maximum overall. But to get records that are only from the last 60 minutes, add a where
condition:
select t.*
from table t
where t.date >= date_sub(getdate(), interval 1 hour) and
not exists (select 1
from table t2
where t2.type = t.type and t2.date > t.date
);
Note that these queries assume you want the most recent row based on the date
column. You can do the same logic with the id
column instead.
SELECT id,type,date from table
WHERE
id in (SELECT max(id) FROM table GROUP BY type);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With