亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

有效地查找給定時(shí)間范圍內(nèi)的最后一個(gè)時(shí)間戳
P粉232409069
P粉232409069 2024-03-22 13:22:08
0
1
922

問(wèn)題出在一個(gè)假設(shè)的在線商店上;我將簡(jiǎn)化我的特定問(wèn)題的數(shù)據(jù)。

假設(shè)有兩個(gè)表:一個(gè)保存每個(gè)客戶的注冊(cè)日期

CREATE TABLE customers (
    customerID int,
    register DATE,
);

,第二個(gè)保存客戶的所有在線訪問(wèn)

CREATE TABLE visits (
    customerID int,
    visit DATE,
);

對(duì)于每個(gè)用戶,我希望找到用戶在注冊(cè)后 7 天內(nèi)訪問(wèn)在線商店的最后一天,以最有效的方式。如果用戶注冊(cè)后未訪問(wèn)過(guò)該商店,我應(yīng)該在注冊(cè)后 7 天內(nèi)返回 NULL 作為最后訪問(wèn)日期。

我當(dāng)然可以LEFT JOIN客戶通過(guò)客戶ID進(jìn)行訪問(wèn),并將訪問(wèn)日期過(guò)濾為注冊(cè)日之間加七,最后得到每個(gè)客戶最大日期。 然而,初始連接會(huì)產(chǎn)生一個(gè)巨大的表,我想避免這種計(jì)算成本高昂的操作。

非常感謝您的想法!

P粉232409069
P粉232409069

全部回復(fù)(1)
P粉514458863

這可能是最有效的:

SELECT  c.customerID, c.register,
        ( SELECT MAX(v.visit)
            FROM visits AS v
            WHERE v.customerID = c.customerID
              AND v.visit < c.register + INTERVAL 7 DAY
        ) AS last_date
    FROM customers AS c;

索引:

customers:  PRIMARY KEY(customerId)  -- is this what  you have?
visits:     INDEX(customerID, visit)  -- or perhaps PRIMARY KEY

您對(duì)“計(jì)算成本高昂的操作”的擔(dān)憂:

  • 獲取行的成本比表達(dá)式求值的成本更高。
  • 我推薦的訪問(wèn)索引是“覆蓋”,因此它只查看索引。
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板