在提出问题之前,我想告诉大家,我一直在尝试在Google和这里找到解决方案。 不幸的是,我仍然认真地坚持这个。我是SQL Server的新手(通常使用MySQL & MongoDB)。我必须将数据库从MySQL迁移到SQL Server。SQL Server Group By基于一列
我想使用GROUP BY item_id。我可以在MySQL中做得很好,但它不适用于SQL Server。这里是我的示例数据,
╔════╦═══════╦════════════╦════════════╦═══════════════════════╗
║ id ║item_id║ lat ║ lng ║ timestamp ║
╠════╬═══════╬════════════╬════════════╬═══════════════════════╣
║ 1 ║ a1 ║51.42743450 ║-0.72776696 ║2017-07-05 09:54:49.000║
║ 2 ║ a1 ║51.59665507 ║-0.72777098 ║2017-07-05 11:54:49.000║
║ 3 ║ b2 ║51.59664690 ║-0.67272032 ║2016-08-10 10:11:49.000║
║ 4 ║ b2 ║51.59664874 ║-0.67270288 ║2016-08-10 11:05:49.000║
║ 5 ║ b2 ║51.59665167 ║-0.67271587 ║2016-08-10 10:08:49.000║
╚════╩═══════╩════════════╩════════════╩═══════════════════════╝
这里是我的MySQL的代码,
SELECT item_id, lat, lng, MAX(timestamp) AS latest FROM record GROUP BY item_id;
它会正确地给我,
╔═══════╦════════════╦════════════╦═══════════════════════╗
║item_id║ lat ║ lng ║ latest ║
╠═══════╬════════════╬════════════╬═══════════════════════╣
║ a1 ║51.59665507 ║-0.72777098 ║2017-07-05 11:54:49.000║
║ b2 ║51.59664874 ║-0.67270288 ║2016-08-10 11:05:49.000║
╚═══════╩════════════╩════════════╩═══════════════════════╝
,但是当我在SQL Server尝试它不工作。它给了我表中的每一行。他是SQL Server代码,
SELECT asset_id, lat, lng, MAX(timestamp) AS latest FROM
mydb.record
GROUP BY asset_id, lat, lng
我也曾经尝试这样做,我已经#2发现(这我真搞不清楚),
SELECT a.asset_id, a.lat, a.lng FROM mydb.record a
INNER JOIN (
SELECT asset_id, MAX(timestamp) latest FROM mydb.record
GROUP BY asset_id
) b
ON a.asset_id = b.asset_id
它仍然没有工作。我真的被SQL Server世界困住了。请有人帮助我。谢谢。
这些工作完美。你节省了我的时间。非常感谢 ! –