ozzboy
ozzboy

Reputation: 2720

MySql Select Statement that should return a unique row

I have the following columns name, rank, created_date in table1.

I would like to

SELECT 
    name,
    rank for latest created_date,
    latest created_date, 
    difference between rank current created_date & previous date
FROM
    table1

There is only one record per person per created_date.

Output should be:

Sam 15 2011/10/05 -3

Thanks for your help.

Upvotes: 2

Views: 83

Answers (1)

Ilmari Karonen
Ilmari Karonen

Reputation: 50328

SELECT
  name,
  rank,
  created_date,
  rank - (
    SELECT rank FROM table1 AS bar
    WHERE bar.created_date < foo.created_date
    ORDER BY created_date DESC
    LIMIT 1
  ) AS diff 
FROM table1 AS foo
ORDER BY created_date DESC
LIMIT 1

Edit: Re-reading your question, I think you want to get one output row per person, with the difference computed between the last two records for that person. If so, a slightly more complicated solution is needed:

SELECT
  name,
  rank,
  created_date,
  rank - (
    SELECT rank FROM table1 AS bar
    WHERE bar.name = foo.name AND bar.created_date < foo.created_date
    ORDER BY created_date DESC LIMIT 1
  ) AS diff 
FROM table1 AS foo
NATURAL JOIN (
  SELECT name, MAX(created_date) AS created_date FROM table1
  GROUP BY name
) AS blah

Upvotes: 1

Related Questions