我想在除最后一条记录之外的所有记录中显示NULL。在最后的记录中想要显示以前的记录值。 结果表将由start_date订购。
我有桌子:
╔════╦══════════╦════════════╦════════════╗
║ id ║ pay_rate ║ start_date ║ end_date ║
╠════╬══════════╬════════════╬════════════╣
║ 2 ║ 50 ║ 2015-08-01 ║ 2015-08-15 ║
║ 4 ║ 50 ║ 2015-08-16 ║ 2999-12-31 ║
║ 5 ║ 55 ║ 2015-07-01 ║ 2999-12-31 ║
╚════╩══════════╩════════════╩════════════╝
我想要的结果如下:
╔═════╦══════════════╦════════════════╦══════════════════╦══════════════╗
║ id ║ pay_rate ║ Pre_pay_rate ║ pre_start_date ║ pre_end_date ║
╠═════╬══════════════╬════════════════╬══════════════════╬══════════════╣
║ 5 ║ 50 ║ NULL ║ NULL ║ NULL ║
║ 2 ║ 50 ║ NULL ║ NULL ║ NULL ║
║ 4 ║ 55 ║ 50 ║ 2015-08-01 ║ 2015-08-15 ║
╚═════╩══════════════╩════════════════╩══════════════════╩══════════════╝
提前致谢: - )
答案 0 :(得分:0)
啰嗦&可能有更好的解决方案,但这会得到你想要的结果。
查询的第一部分选择除最后一条记录之外的所有记录,通过按相反顺序排序,跳过第一条记录&然后按日期顺序求助。第二部分选择最终记录&加入到之前的记录中。
SELECT id, pay_rate, pre_payrate, pre_start_date, pre_end_date FROM
(SELECT * FROM (SELECT id, pay_rate, start_date, NULL pre_payrate, NULL pre_start_date, NULL pre_end_date
FROM mytable
ORDER BY start_date DESC
LIMIT 1, 9223372036854775807) alias1 ORDER BY start_date) alias2
UNION ALL
SELECT * FROM
(SELECT id, pay_rate
FROM mytable
ORDER BY start_date DESC
LIMIT 1) alias3
JOIN
(SELECT pay_rate pre_payrate, start_date pre_start_date, end_date pre_end_date
FROM mytable
ORDER BY 1 DESC
LIMIT 1,1) alias4
注意 - start_date需要包含在第一个查询中,以便可以将查询放回正确的日期顺序。 9223372036854775807是最大的签名int。