mysql根据一行排序显示出来_mysql-在同一列上按多种情况对行进行排序

我有这个结构

| start_at

----------------------

record1 | 2016-01-20

record2 | 2016-01-15

record3 | 2016-01-22

record4 | 2016-01-10

可以说当前日期是2016年1月19日

我想首先获取具有大于当前日期的start_at的记录,并按start_at ASC对其进行排序.

然后,我想获取具有start_at小于当前日期的记录,并按start_at DESC对其进行排序.

所以结果应该是这样的:

| start_at

----------------------

record1 | 2016-01-20

record3 | 2016-01-22

record2 | 2016-01-15

record4 | 2016-01-10

我怎样才能做到这一点?

我尝试这样做,但没有成功:

ORDER BY start_at> = NOW()ASC,start_at

最佳答案

您已关闭,使用以下命令的多个键:

ORDER BY (start_at >= NOW()) desc,

(case when start_at >= NOW() then start_at end) asc,

(case when start_at < NOW() then start_at end) desc

第一个条件将未来日期放在首位.怎么样?表达式start_at> = NOW()返回一个布尔值.真值是“ 1”,假值是“ 0”,因此,以降序表示,但将来的值优先.其他两个键处理每个组中的顺序.

### 回答1: 可以使用MySQL的变量来实现获取上一行数据的某个字段,具体实现如下: SELECT id, name, @prev_value := value AS prev_value, @prev_value := value AS value FROM table_name ORDER BY id; 其中,@prev_value是MySQL的变量,用来存储上一行的value值,通过将上一行的value值赋值给prev_value,再将当前行的value值赋值给@prev_value,就可以实现获取上一行数据的某个字段的功能。 ### 回答2: 在MySQL中,如果不使用系统函数,可以通过使用自定义变量来获取上一行数据的某个字段。具体过程如下: 1. 首先,创建一个新的自定义变量,用于保存上一行的值。例如,创建一个变量@last_value来保存上一行的值。 2. 在查询结果中使用IFNULL函数来检查当前行的值是否为空,如果为空,则将变量@last_value的值赋给当前行。例如,假设要获取字段A的上一行的值,可以使用以下语句: SELECT columnA, @last_value := IFNULL(columnA, @last_value) AS last_value FROM table_name ORDER BY some_column; 3. 上述查询语句中,ORDER BY语句用于确保查询结果按照某个列的顺序进行排序。请根据实际需求指定合适的排序列。 4. 最后,查询结果中的"last_value"列就是每一行的上一行的字段A的值。 需要注意的是,上述方法仅适用于在同一个查询中获取上一行数据的某个字段的值。如果需要获取更复杂的分析操作,建议使用窗口函数(Window Functions)来实现。窗口函数提供了更强大和灵活的功能来处理类似的需求。 ### 回答3: 在不使用系统函数的情况下,可以通过自定义变量来获取上一行数据的某个字段。 首先,我们可以使用`order by`来对数据进行排序,确保按照想要获取上一行的字段进行排序。假设要获取上一行的字段为`field1`,可以使用以下语句: ```sql SELECT field1, @previous_field1:=field1 AS previous_field1 FROM your_table ORDER BY field1 ``` 上述语句会将数据按照`field1`字段进行排序,并将`field1`的值赋给`@previous_field1`变量。然后,可以在查询结果中同时获取当前行的`field1`和上一行的`previous_field1`。 接下来,可以通过嵌套查询的方式使用自定义变量,获取上一行的`previous_field1`字段的值。例如: ```sql SELECT field1, previous_field1 FROM ( SELECT field1, @previous_field1 AS previous_field1, @previous_field1:=field1 FROM your_table ORDER BY field1 ) AS t ``` 上述查询会将上一步获取的查询结果作为子查询,并返回当前行的`field1`和关联的上一行的`previous_field1`。 需要注意,自定义变量在查询语句中使用时需要进行正确的初始化和赋值操作,以确保变量的值准确无误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值