Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get last record of each day in mysql?

Tags:

mysql

I want to get last record of each day in mysql.Location<id, date, place_id> table has multiple entries on each day. This Location table has place_id and time at which place_id is inserted.

Also taking consider if place_id is not present then return second last record which has place_id. In following table for NULL, '2016-04-06 18:52:06' record we are returning '13664', '2016-04-06 12:57:30', which is second last record on '2016-04-06' (6th March) and has place_id.

One more thing, on single day, there would be more place_id, see the following table..

   id  ||  place_id || date
   '1',   '47', '2016-04-05 18:09:37'
   '2',   '48', '2016-04-05 12:09:37'
   '3',   '13664', '2016-04-06 12:57:30'
   '4',   '9553', '2016-04-08 10:09:37'
   '5',   NULL, '2016-04-06 18:52:06'
   '6',   '9537', '2016-04-07 03:34:24'
   '7',   '9537', '2016-04-07 03:34:24'
   '8',   '656', '2016-04-07 05:34:24'
   '9',   '7', '2016-04-07 05:34:57'

When I run following query it returns following result

Query I run the following query but it is giving me wrong result

`Location<id, place_id, date>`

select L1.place_id, L1.date from 
     Location1 L1 
Left join
     Location1 L2
on 
     Date(L1.date) = Date(L2.date)
And
    L1.date < L2.date
where 
    L2.date is null

group by L1.date;

Result I want:

 id....place_id ........date   
   '1',   '47',      '2016-04-05 18:09:37'    
   '3',   '13664',   '2016-04-06 12:57:30'  
   '4',   '9553',    '2016-04-08 10:09:37'   
   '9',   '7',       '2016-04-07 05:34:57'
like image 860
Guest Avatar asked May 09 '16 06:05

Guest


People also ask

How do I get last 7 days record in SQL?

We use system function now() to get the latest datetime value, and INTERVAL clause to calculate a date 7 days in the past.

How can I get yesterday date record in MySQL?

To get yesterday's date, you need to subtract one day from today's date. Use CURDATE() to get today's date. In MySQL, you can subtract any date interval using the DATE_SUB() function. Here, since you need to subtract one day, you use DATE_SUB(CURDATE(), INTERVAL 1 DAY) to get yesterday's date.

How do I select the last day in SQL?

The LAST_DAY() function extracts the last day of the month for a given date.

How can I get recent data in MySQL?

To get the last record, the following is the query. mysql> select *from getLastRecord ORDER BY id DESC LIMIT 1; The following is the output. The above output shows that we have fetched the last record, with Id 4 and Name Carol.


2 Answers

You may give it a try:

SELECT 
L.id,
L.place_id,
L.date
FROM Location L
INNER JOIN 
(
  SELECT 
   MAX(date) max_time
  FROM Location
  GROUP BY Date(`date`)
) AS t
ON L.date = t.max_time

SQL FIDDLE DEMO

SQL FIDDLE DEMO2

[Based on your expected output]

like image 156
1000111 Avatar answered Sep 25 '22 11:09

1000111


Can you try with the following query:

SELECT * FROM `Location` GROUP BY DATE(`date`) ORDER BY `date` DESC

What this query does is group the rows by descending date and show a row for each date.

Get the last record:

SELECT * FROM `Location` ORDER BY `date` LIMIT 1;

Get the last record that doesn't have a null as a value:

SELECT * FROM `Location` WHERE place_id IS NOT NULL ORDER BY `date` LIMIT 1;

Get records for all the places which are not null:

SELECT * FROM `Location` WHERE place_id IS NOT NULL GROUP BY `place_id` ORDER BY `date` DESC
like image 20
HerpaMoTeH Avatar answered Sep 23 '22 11:09

HerpaMoTeH