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

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

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

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

1.業(yè)務(wù)場(chǎng)景

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

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

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

2.思路

2.1 sql

1>查詢前一項(xiàng),查詢小于當(dāng)前id的項(xiàng)逆序取第一個(gè)

2>查詢后一項(xiàng),查詢大于當(dāng)前id的項(xiàng)正序取第一個(gè)

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

2.2 頁(yè)面邏輯

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

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

以此(1)(2)往復(fù)

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ù)查詢或計(jì)算

用戶下相鄰訂單的時(shí)間差舉例

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

拿一個(gè)在電商中最常見的情況,計(jì)算一下用戶首單和第二單的時(shí)間間隔這樣的數(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

查詢用戶首單和第二單的時(shí)間間隔:

SELECT
	m.customer_id,
	sfo.created_at as '首單時(shí)間',
	m.created_at as '第二單時(shí)間',
	(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首單時(shí)間第二單時(shí)間兩單時(shí)間差
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

整個(gè)原理如下:

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

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

SELECT
	m.customer_id,
	m.created_at as '后一單時(shí)間',
	SUBSTRING_INDEX(
		GROUP_CONCAT(sfo.created_at ORDER BY sfo.created_at DESC),
		',',
		1
	) as '前一單時(shí)間',
	(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后一單時(shí)間前一單時(shí)間兩單時(shí)間差
12017-07-27 10:21:372017-07-27 01:27:220.3710

這里判斷的是統(tǒng)計(jì)數(shù)為2的,也就是用戶的第二單和第三單的時(shí)間間隔計(jì)算,因?yàn)橛脩?0和12只有兩單所以結(jié)果中無這兩個(gè)用戶;

整個(gè)原理如下:

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

這只是我想到的應(yīng)對(duì)這種場(chǎng)景通過SQL語(yǔ)句進(jìn)行查詢的方法。 

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

相關(guān)文章

  • sql模式設(shè)置引起的問題解決辦法

    sql模式設(shè)置引起的問題解決辦法

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

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

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

    MySQL中@i:=@i+1表達(dá)式用法詳解

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

    Mysql中explain作用詳解

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

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

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

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

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

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

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

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

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

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

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

    MySQL GROUP BY多個(gè)字段的具體使用

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

最新評(píng)論

尉犁县| 甘孜县| 鹿泉市| 定边县| 赞皇县| 金川县| 秦皇岛市| 宜宾市| 呼玛县| 黎平县| 永济市| 怀仁县| 定襄县| 平泉县| 繁峙县| 和平区| 天津市| 包头市| 迭部县| 日土县| 保靖县| 石城县| 繁昌县| 土默特右旗| 轮台县| 贺兰县| 牟定县| 江川县| 鱼台县| 闽清县| 东阿县| 深泽县| 大方县| 大冶市| 开鲁县| 江口县| 滁州市| 玉溪市| 北安市| 伊宁县| 连城县|