我如何才能获得每个名字的最新值。
SQL="SELECT name,Myvalue,theDate from Mytable where name in ('name1','name2','name3')";
因此案例中的结果仅为3条记录。 Primery Key:AutoInc。 theDate:值的日期。
答案 0 :(得分:1)
使用变量在mysql中创建row_number
。
因为数据是订单by DATE DESC
,所以带有rownum = 1
的行会返回每个名称的最新内容
<强> SQL FIDDLE DEMO 强>
测试数据
INSERT INTO ForgeRock
(`name`, `Myvalue`, `theDate`)
VALUES
('name1', 1, '2016/01/10'),
('name1', 7, '2016/01/11'),
('name1', 6, '2016/01/12'), <-- latest
('name2', 2, '2016/01/03'), <-- latest
('name2', 5, '2016/01/02'),
('name2', 3, '2016/01/01'),
('name3', 30, '2016/01/05'),
('name3', 12, '2016/01/06'),
('name3', 33, '2016/01/07') <-- latest
;
QUERY
SELECT name,
Myvalue,
theDate
FROM
(
SELECT name,
Myvalue,
theDate,
(@rownum := if(@name = name,
@rownum + 1, -- increase rownum
if (@name := name, -- reset counter
1,
1)
)
) rownum
FROM ForgeRock
CROSS JOIN (select @rownum := 1, @name := '') params -- initialize the variables
WHERE name in ('name1','name2','name3')
ORDER BY name, theDate desc
) T
WHERE rownum = 1
ORDER BY name
<强>输出强>
| name | Myvalue | theDate |
|-------|---------|---------------------------|
| name1 | 6 | January, 12 2016 00:00:00 |
| name2 | 2 | January, 03 2016 00:00:00 |
| name3 | 33 | January, 07 2016 00:00:00 |