最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql如何通過當前排序字段獲取相鄰數(shù)據(jù)項

 更新時間:2022年05月09日 09:23:55   作者:遙?寄  
這篇文章主要介紹了mysql如何通過當前排序字段獲取相鄰數(shù)據(jù)項,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

通過當前排序字段獲取相鄰數(shù)據(jù)項

1.業(yè)務場景

(1)需要專門以一個彈窗頁面展示一項數(shù)據(jù)的所有字段值.其中一些字段值長度較大。

(2)能夠左右切換上一項下一項數(shù)據(jù)

(3)存在可排序的字段,如以id進行排序

2.思路

2.1 sql

1>查詢前一項,查詢小于當前id的項逆序取第一個

2>查詢后一項,查詢大于當前id的項正序取第一個

3>連接兩項結(jié)果

2.2 頁面邏輯

(1)在展示當前項時獲取好兩相鄰的數(shù)據(jù),在做切換時直接填充數(shù)據(jù)

(2)切換數(shù)據(jù)展示時同樣再次獲取當前項兩相鄰數(shù)據(jù)

以此(1)(2)往復

3.sql

例:查詢id為40兩相鄰的數(shù)據(jù)

( SELECT * FROM [表名] WHERE id < 40 ORDER BY id DESC LIMIT 1 ) UNION
(
?? ?SELECT
?? ??? ?*?
?? ?FROM
?? ??? ?[表名]
?? ?WHERE
?? ??? ?id > 40?
?? ?ORDER BY
?? ??? ?id?
?? ?LIMIT 1
)

同表相鄰數(shù)據(jù)查詢或計算

用戶下相鄰訂單的時間差舉例

這里主要介紹一下,在一張數(shù)據(jù)表下對相鄰的數(shù)據(jù)進行一個相關查詢和計算;

拿一個在電商中最常見的情況,計算一下用戶首單和第二單的時間間隔這樣的數(shù)據(jù)來舉例,如下:

idcustomer_idcreated_at
112017-07-21 09:43:02
2122017-07-25 11:37:48
3102017-07-25 11:43:41
412017-07-27 01:27:22
5102017-07-27 07:46:45
612017-07-27 10:21:37
7122017-07-27 13:26:19

查詢用戶首單和第二單的時間間隔:

SELECT
	m.customer_id,
	sfo.created_at as '首單時間',
	m.created_at as '第二單時間',
	(unix_timestamp(m.created_at) - unix_timestamp(sfo.created_at))/86400 as '兩單相差天數(shù)'
	
FROM
	sales_flat_order m 
LEFT JOIN 
	sales_flat_order sfo on m.customer_id = sfo.customer_id and sfo.created_at < m.created_at
WHERE
	(
		SELECT
			count(*)
		FROM
			sales_flat_order n
		WHERE
			m.customer_id = n.customer_id
			AND m.created_at > n.created_at
	) = 1
GROUP BY m.customer_id

查詢結(jié)果是:

customer_id首單時間第二單時間兩單時間差
12017-07-21 09:43:022017-07-27 01:27:225.6558
122017-07-25 11:37:482017-07-27 13:26:192.0754
102017-07-25 11:43:412017-07-27 07:46:451.8355

整個原理如下:

  • 將一張表查詢兩次得到兩組數(shù)據(jù),分別為別名m和別名n的兩組數(shù)據(jù);
  • 以m為主,用n的數(shù)據(jù)和m的數(shù)據(jù)作對比,通過created_at的判斷過濾掉一些無用數(shù)據(jù);
  • 使用count()函數(shù)統(tǒng)計滿足條件的數(shù)據(jù)個數(shù);
  • 統(tǒng)計數(shù)為1時說明n表中比m表中時間小的只有1條,m中的該條數(shù)據(jù)也就是該用戶下的第二筆訂單;
  • 通過LEFT JOIN聯(lián)表,通過created_at找到比第二單更早的一單也就是用戶的首單;
  • 利用unix_timestamp把得到的兩條數(shù)據(jù)的created_at做差,得到了兩筆訂單的時間間隔;

下面做了一下拓展,可以查詢?nèi)我庀噙B的兩筆訂單的時間間隔:

SELECT
	m.customer_id,
	m.created_at as '后一單時間',
	SUBSTRING_INDEX(
		GROUP_CONCAT(sfo.created_at ORDER BY sfo.created_at DESC),
		',',
		1
	) as '前一單時間',
	(unix_timestamp(m.created_at) - unix_timestamp(
		SUBSTRING_INDEX(
			GROUP_CONCAT(sfo.created_at ORDER BY sfo.created_at DESC),
			',',
			1
		)
	))/86400 as '兩單相差天數(shù)'
FROM
	sales_flat_order m 
LEFT JOIN 
	sales_flat_order sfo on m.customer_id = sfo.customer_id and sfo.created_at < m.created_at
WHERE
	(
		SELECT
			count(*)
		FROM
			sales_flat_order n
		WHERE
			m.customer_id = n.customer_id
			AND m.created_at > n.created_at
	) = 2
GROUP BY m.customer_id;

得到數(shù)據(jù)如下:

customer_id后一單時間前一單時間兩單時間差
12017-07-27 10:21:372017-07-27 01:27:220.3710

這里判斷的是統(tǒng)計數(shù)為2的,也就是用戶的第二單和第三單的時間間隔計算,因為用戶10和12只有兩單所以結(jié)果中無這兩個用戶;

整個原理如下:

  • 將一張表查詢兩次得到兩組數(shù)據(jù),分別為別名m和別名n的兩組數(shù)據(jù);
  • 以m為主,用n的數(shù)據(jù)和m的數(shù)據(jù)作對比,通過created_at的判斷過濾掉一些無用數(shù)據(jù);
  • 使用count()函數(shù)統(tǒng)計滿足條件的數(shù)據(jù)個數(shù);
  • 篩選之后m中得到的是第三筆訂單;
  • 通過LEFT JOIN聯(lián)表,通過created_at找到比第三筆訂單時間早的訂單,這里會從sfo中得到兩筆訂單;
  • 利用GROUP_CONCAT函數(shù)每組訂單中各得到的兩筆訂單利用created_at進行降序排序,然后得到通過‘,’連接的兩條數(shù)據(jù)的時間,如下:2017-07-27 01:27:22,2017-07-21 09:43:02
  • 使用SUBSTRING_INDEX函數(shù)通過’,'將數(shù)據(jù)拆分再拿到第一條數(shù)據(jù),也就是第二筆訂單的時間了;
  • 利用unix_timestamp對created_at作差,得到兩筆訂單的時間間隔;

這只是我想到的應對這種場景通過SQL語句進行查詢的方法。 

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • sql模式設置引起的問題解決辦法

    sql模式設置引起的問題解決辦法

    這篇文章主要介紹了sql模式設置引起的問題解決辦法,文章圍繞主題展開詳細內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • MySQL中的常用函數(shù)及用法總結(jié)

    MySQL中的常用函數(shù)及用法總結(jié)

    MySQL是一種常用的關系型數(shù)據(jù)庫管理系統(tǒng),它提供了許多內(nèi)置函數(shù)來處理數(shù)據(jù),本文將介紹MySQL中的各種常用函數(shù),包括字符串函數(shù)、日期函數(shù)、數(shù)學函數(shù)、聚合函數(shù)等,需要的朋友可以參考下
    2023-06-06
  • MySQL中@i:=@i+1表達式用法詳解

    MySQL中@i:=@i+1表達式用法詳解

    這篇文章主要給大家介紹了關于MySQL中@i:=@i+1表達式用法的相關資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用mysql具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Mysql中explain作用詳解

    Mysql中explain作用詳解

    這篇文章主要介紹了Mysql中explain的相關內(nèi)容,涉及索引的部分知識,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • Window Docker 安裝MySQL8.0的過程詳解

    Window Docker 安裝MySQL8.0的過程詳解

    本文給大家介紹在Windows環(huán)境下安裝Docker并配置MySQL容器的全流程介紹,過程中還涉及到文件映射和客戶端連接MySQL的操作,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • MySQL IS NULL空值查詢的實現(xiàn)

    MySQL IS NULL空值查詢的實現(xiàn)

    MySQL 提供了?IS NULL?關鍵字,用來判斷字段的值是否為空值,本文主要介紹了MySQL IS NULL空值查詢的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-08-08
  • mysql下mysqladmin日常管理命令總結(jié)(必看篇)

    mysql下mysqladmin日常管理命令總結(jié)(必看篇)

    下面小編就為大家?guī)硪黄猰ysql下mysqladmin日常管理命令總結(jié)(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 軟件測試-MySQL(六:數(shù)據(jù)庫函數(shù))

    軟件測試-MySQL(六:數(shù)據(jù)庫函數(shù))

    這篇文章主要介紹了MySQL數(shù)據(jù)庫函數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • mysql外鍵(Foreign Key)介紹和創(chuàng)建外鍵的方法

    mysql外鍵(Foreign Key)介紹和創(chuàng)建外鍵的方法

    這篇文章主要介紹了mysql外鍵(Foreign Key)命令和添加外鍵方法,需要的朋友可以參考下
    2014-02-02
  • MySQL GROUP BY多個字段的具體使用

    MySQL GROUP BY多個字段的具體使用

    在mysql中使用group by的意思是分組查詢,如果group by后面跟的是多個字段,按照這些字段的不同組合分組查詢,本文就詳細的介紹MySQL GROUP BY多個字段的具體使用,感興趣的可以了解一下
    2023-09-09

最新評論

肥乡县| 定西市| 宾川县| 神池县| 乐业县| 科尔| 本溪市| 大邑县| 剑川县| 白银市| 朝阳区| 陇南市| 万年县| 安图县| 乐业县| 长白| 上高县| 嘉义县| 加查县| 扬州市| 龙山县| 岗巴县| 满城县| 丹阳市| 沁水县| 上饶市| 鄂温| 萨迦县| 福建省| 界首市| 鹤山市| 林州市| 平昌县| 嘉祥县| 分宜县| 吉木乃县| 平泉县| 临漳县| 崇明县| 贵南县| 天长市|