开发者

MySql Select Statement that should return a unique row

开发者 https://www.devze.com 2023-04-10 16:22 出处:网络
I have the following columns name, rank, created_date in table1. I would like to SELECT name, rank for latest created_date,

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.


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
0

精彩评论

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