【发布时间】:2012-05-02 09:08:44
【问题描述】:
我想要翻译以下 MySQL 查询,以便它在 MSSQL 中工作:
SELECT *
FROM
(
SELECT *
FROM ranking
ORDER BY rank_no ASC
, effective_dt DESC
) AS sorted_rank
WHERE sorted_rank.rank_id = 1950
GROUP BY sorted_rank.rank_no
LIMIT 10
我花了一个下午的时间摆弄,但我一直遇到 GROUP BY 和聚合的问题以及各种其他错误。
要在作品中添加更多扳手,排名表没有主键,我认为可能需要它来让这个工作......
服务器版本:Microsoft SQL Server 2000 - 8.00.2039
架构:
rank_id int(11)
week_id int(11)
rider_id int(11)
year_no int(11)
rank_no int(11)
effective_dt datetime
lastupdate_dt datetime
point_no float
average_no float
result_qy int(11)
数据集:
INSERT INTO `ranking` (`id`, `rank_id`, `week_id`, `rider_id`, `year_no`, `rank_no`, `effective_dt`, `lastupdate_dt`, `point_no`, `average_no`, `result_qy`)
VALUES
(244, 1950, 417, 72253, 2007, 1, '2006-09-03 00:00:00', '2006-09-01 01:45:00', 2559.19, 426.53, 5),
(108, 1950, 426, 72253, 2007, 1, '2006-11-05 00:00:00', '2006-11-01 05:59:00', 2559.19, 426.53, 5),
(340, 1950, 386, 21767, 2006, 1, '2006-01-29 00:00:00', '2006-11-29 13:31:00', 3256.25, 814.06, 4),
(178, 1950, 420, 60369, 2007, 2, '2006-09-24 00:00:00', '2006-09-26 06:31:00', 2315.86, 385.98, 4),
(166, 1950, 417, 60369, 2007, 2, '2006-09-03 00:00:00', '2006-09-01 01:45:00', 2315.86, 385.98, 4),
(109, 1950, 426, 60369, 2007, 2, '2006-11-05 00:00:00', '2006-11-01 05:59:00', 2315.86, 385.98, 4),
(110, 1950, 426, 49428, 2007, 3, '2006-11-05 00:00:00', '2006-11-01 05:59:00', 2191.19, 365.2, 4),
(227, 1950, 417, 49428, 2007, 3, '2006-09-03 00:00:00', '2006-09-01 01:45:00', 2191.19, 365.2, 4),
(409, 1950, 388, 19570, 2006, 3, '2006-02-12 00:00:00', '2006-11-29 13:31:00', 3106.26, 776.57, 4),
(72, 1950, 399, 47036, 2006, 4, '2006-04-30 00:00:00', '2006-11-29 13:33:00', 1038.02, 346.01, 3),
(413, 1950, 388, 55533, 2006, 4, '2006-02-12 00:00:00', '2006-11-29 13:31:00', 2835.3, 708.83, 4),
(111, 1950, 426, 64517, 2007, 4, '2006-11-05 00:00:00', '2006-11-01 05:59:00', 2001.68, 333.61, 4),
(112, 1950, 426, 72379, 2007, 5, '2006-11-05 00:00:00', '2006-11-01 05:59:00', 1677.32, 279.55, 6),
(263, 1950, 420, 27123, 2007, 5, '2006-09-24 00:00:00', '2006-09-26 06:31:00', 1607.31, 267.88, 4),
(415, 1950, 388, 45738, 2006, 5, '2006-02-12 00:00:00', '2006-11-29 13:31:00', 2744.03, 686.01, 4),
(113, 1950, 426, 27123, 2007, 6, '2006-11-05 00:00:00', '2006-11-01 05:59:00', 1607.31, 267.88, 4),
(575, 1950, 420, 50354, 2007, 6, '2006-09-24 00:00:00', '2006-09-26 06:31:00', 1148.84, 191.47, 2),
(422, 1950, 388, 39070, 2006, 6, '2006-02-12 00:00:00', '2006-11-29 13:31:00', 2626.51, 656.63, 4),
(114, 1950, 426, 65745, 2007, 7, '2006-11-05 00:00:00', '2006-11-01 05:59:00', 1576.83, 262.8, 4),
(293, 1950, 388, 42127, 2006, 7, '2006-02-12 00:00:00', '2006-11-29 13:31:00', 2614.46, 653.62, 4),
(576, 1950, 420, 32669, 2007, 7, '2006-09-24 00:00:00', '2006-09-26 06:31:00', 1133.15, 188.86, 2),
(577, 1950, 420, 23242, 2007, 8, '2006-09-24 00:00:00', '2006-09-26 06:31:00', 1107.79, 184.63, 2),
(199, 1950, 420, 60322, 2007, 8, '2006-09-24 00:00:00', '2006-09-26 06:31:00', 1390.22, 231.7, 3),
(115, 1950, 426, 54984, 2007, 8, '2006-11-05 00:00:00', '2006-11-01 05:59:00', 1532.8, 255.47, 3),
(578, 1950, 420, 41116, 2007, 9, '2006-09-24 00:00:00', '2006-09-26 06:31:00', 1096.64, 182.77, 2),
(116, 1950, 426, 72386, 2007, 9, '2006-11-05 00:00:00', '2006-11-01 05:59:00', 1442.49, 240.41, 6),
(74, 1950, 399, 32669, 2006, 9, '2006-04-30 00:00:00', '2006-11-29 13:33:00', 817.64, 272.55, 3),
(818890, 1950, 1167, 77510, 0, 10, '2012-01-13 00:00:00', '2012-01-13 11:11:00', 1464.43, 366.11, 4),
(825706, 1950, 1168, 70324, 0, 10, '2012-01-20 00:00:00', '2012-01-20 11:05:00', 1259.38, 314.85, 2),
(826752, 1950, 1170, 75911, 0, 10, '2012-02-01 00:00:00', '2012-02-01 12:58:00', 1237.95, 309.49, 3);
正确的输出:
1950 426 72253 2007 1 2006-11-05 00:00:00 2006-11-01 05:59:00 2559.19 426.53 5
1950 426 60369 2007 2 2006-11-05 00:00:00 2006-11-01 05:59:00 2315.86 385.98 4
1950 426 49428 2007 3 2006-11-05 00:00:00 2006-11-01 05:59:00 2191.19 365.2 4
1950 426 64517 2007 4 2006-11-05 00:00:00 2006-11-01 05:59:00 2001.68 333.61 4
1950 426 72379 2007 5 2006-11-05 00:00:00 2006-11-01 05:59:00 1677.32 279.55 6
1950 426 27123 2007 6 2006-11-05 00:00:00 2006-11-01 05:59:00 1607.31 267.88 4
1950 426 65745 2007 7 2006-11-05 00:00:00 2006-11-01 05:59:00 1576.83 262.8 4
1950 426 54984 2007 8 2006-11-05 00:00:00 2006-11-01 05:59:00 1532.8 255.47 3
1950 426 72386 2007 9 2006-11-05 00:00:00 2006-11-01 05:59:00 1442.49 240.41 6
1950 1170 75911 0 10 2012-02-01 00:00:00 2012-02-01 12:58:00 1237.95 309.49 3
【问题讨论】:
-
你为什么按
rank_no分组?您想获得ranking的某个字段的总和以及相同的rank_no吗?请提供ranking表结构。 -
rank_no 的值为 1,2,3,4 等,但每个数字可以出现多次(1,1,1,1,1,2,2,2,2,2 ,3,3,3,3,3,3,4,4,4,4 等)我只想要每个可能的 rank_no 的最新行,因此 GROUP BY
-
ranking表有哪些列? -
@Andy 听起来这是一个更大的问题。没有主键的表可能不是一个很好的设计。您能否发布表格定义。还要摆脱 MSSQL 不支持的 LIMIT 。你需要做一个TOP 10。你如何确定最新的rank_no? group by 没有识别最新的 rank_no 它只是通过将项目 1,1,1 分组为 1 来删除重复项。
-
我认为查询中显示了相关的,但我已将架构添加到原始帖子中。
标签: mysql group-by sql-server-2000 sql-order-by