mysql max(timestamp)查询nodejs

时间:2015-03-14 06:38:21

标签: mysql node.js

我希望使用maxtime标记值在我的数据库中获取最新记录。 db布局列在下面

database layout

这是我的代码,包括我正在运行的查询以检索所需的行

var mysql = require("mysql");

var connection = mysql.createConnection({
    host : 'localhost',
    user : 'root',
    password : 'database',
    database : 'airplanemap'
});

connection.connect(function (err) {
    if(err) {
        console.error('error connecting' + err.stack);
        return;
    }

    console.log('connected as id' + connection.threadId);

    connection.query('SELECT name, baggageno, destination, max(ts) FROM map', function (err, results, fields) {

        if(err) {
        console.error(err.stack);
        return;
        }

        if(results.length > 0) {
            var myresult = results[0];
            console.log('results ' + myresult['name'] + ' ' + myresult['baggageno'] + ' ' + myresult['destination'] + ' ' + myresult['max(ts)']);
        }
        else
        {
            console.log('no results');
        }
    })
});

我收到的结果是

jane 2 new york Sat Mar 14 2015 02:25:03 GMT-0400

从此返回最高时间戳,但是name,baggageno和destination

的列值错误

应该是

john 5 toronto星期六三月14 2015 02:25:03 GMT-0400

我做错了什么?

编辑:我期望结果数组中的一行值表中具有最新时间戳的行。

1 个答案:

答案 0 :(得分:1)

目前您的查询返回4行:

[
  { name: 'john', baggageno: 5, destination: 'toronto', 'max(ts)': 'Sat Mar 14 2015 02:25:03 GMT-0400' },
  { name: 'jill', baggageno: 1, destination: 'karachi', 'max(ts)': 'Sat Mar 14 2015 02:25:03 GMT-0400' },
  { name: 'jane', baggageno: 2, destination: 'new york', 'max(ts)': 'Sat Mar 14 2015 02:25:03 GMT-0400' },
  { name: 'jim', baggageno: 5, destination: 'glasgow', 'max(ts)': 'Sat Mar 14 2015 02:25:03 GMT-0400' },
]

并且您从该结果集中选择了第一行,这就是为什么您会看到您所看到的内容(尽管行的排序取决于服务器,因为您没有要求特定的订购)。

如果您尝试查找具有最新ts值的记录,则需要添加某种过滤器。例如,使用连接可能类似​​于:

SELECT map.*
FROM map
LEFT JOIN map map2 ON map.name = map2.name
  AND map.baggageno = map2.baggageno
  AND map.destination = map2.destination
  AND map.ts < map2.ts
WHERE map2.name IS NULL

如果你想这样做,你也可以做类似的事情,除了使用内部联接。