mysql怎么求上下两行之差,mysql两行相减

sql语句上下两行的日期相减

对于支持分析函数lag的数据库(Oracle 9i或之后, SQL Server 2012开始有支持lag, lead分析函数; PostgreSQL和MySQL不知道)来说, 可以直接使用lag函数.

创新互联主要从事成都网站制作、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务兴庆,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792

lag分析函数的作用是: 取得按分组(分组可以不指定)与排序设定下, 前一条记录的字段值. 基本格式如下:

LAG(field_name) OVER([partition by ... , ]order by ...)

其中, LAG, OVER为分析函数的关键字; field_name是要取上一条记录的字段名, partition by是指定按哪些字段进行分组, 如果不指定, 则所有的记录就是一个分组; order by是指定按何种顺序排列记录, 它与整个查询的order by可以相同或不同.

有了lag函数, 在查询中就可以获得上一条记录的某个字段值, 从而可以实现与本条记录的运算. 以Oracle查询示例(使用Oracle自带的HR Schema):

SELECT FIRST_NAME, LAST_NAME, HIRE_DATE, LAG(HIRE_DATE) OVER(ORDER BY HIRE_DATE), HIRE_DATE - (LAG(HIRE_DATE) OVER(ORDER BY HIRE_DATE)) AS HIRE_DATE_DIFF

FROM HR.EMPLOYEES

ORDER BY HIRE_DATE;

这里, lag中的排序和select的排序必须相同(因为要获取结果集中与上一个记录的日期差值).

如果没有lag函数, 则要构造查询来实现.

sql语句如何查询两个值之间的差?

工具/材料:Management Studio。

1、首先在桌面上,点击“Management Studio”图标。

2、然后在该界面中,点击左上角“新建查询”选项。

3、之后在该界面中,输入SQL语句“select MoneyA - MoneyB from test;”。

4、最后在该界面中,显示两个值之间的差。

求MYSQL数据库中上下相邻两行的差

这个结果要从第一个开始吗?那样就有点复杂了。这个行不行,结果是从第二行开始的:

mysql set @last_id := -1;

Query OK, 0 rows affected (0.00 sec)

mysql select id, A, B, result

- from

- (

-     select

-         table1.*,

-         @last_id,

-         if(@last_id  0, null, id - @last_id) as result,

-         @last_id := id

-     from

-         table1

- ) as tmp

- ;

+----+------+------+--------+

| id | A    | B    | result |

+----+------+------+--------+

|  1 |    2 |    1 |   NULL |

| 21 |    1 |    1 |     20 |

| 33 |    3 |    2 |     12 |

+----+------+------+--------+

3 rows in set (0.00 sec)

MySQL如何计算同一张表中同一用户相邻两行之间的地理距离,已知经纬度……

实现的话,貌似主要是两个环节

1 先得到用户的两个相邻点的经纬度。

先把表处理成带唯一标识字段的(uid),便于下一步取出经纬度。表T(uid,user_id,latitude,longitude)

生成一个视图,取得两个相邻点经纬度。

create view vt as

select A.user_id,A.latitude latitudeA,A.longitude longitudeA

,B.latitude latitudeB,B.longitude longitudeB

from T A inner join T B

ON A.user_id=B.user_id AND A.uidB.uid;

2 找个经纬度计算距离的公式(据说有好几种算法),在查询中动态生成或编程中计算生成

select user_id, acos( cos(latitudeA)*cos(longitudeA) * cos(latitudeB)*cos(longitudeB)

+cos(latitudeA)*sin(longitudeA) * cos(latitudeB)*sin(longitudeB)

+sin(latitudeA)*sin(latitudeB)) dis

from vt;


网站栏目:mysql怎么求上下两行之差,mysql两行相减
分享路径:http://ybzwz.com/article/dssoigo.html