MySQL 判斷用戶連續簽到多少天


這是我的條件:

你們自己換 

WHERE m_id = 4 and integral_type=1 and del_flag=0

表結構和數據

/*
 Navicat Premium Data Transfer

 Source Server         : 
 Source Server Type    : MySQL
 Source Server Version : 50562
 Source Host           : 
 Source Schema         : home_future_dev

 Target Server Type    : MySQL
 Target Server Version : 50562
 File Encoding         : 65001

 Date: 02/09/2020 23:02:43
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for home_integral_log
-- ----------------------------
DROP TABLE IF EXISTS `home_integral_log`;
CREATE TABLE `home_integral_log`  (
  `integral_id` bigint(22) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `m_id` bigint(22) NOT NULL COMMENT '會員id',
  `m_no` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '會員編號',
  `integral_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '積分類型:1-簽到,2-訂單 ,3-其他',
  `settlement_type` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '結算類型1-支入 2-支出',
  `integral_value` int(7) NOT NULL DEFAULT 0 COMMENT '積分數額',
  `directions` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '說明',
  `create_time` datetime NOT NULL COMMENT '創建時間',
  `order_no` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '訂單編號',
  `del_flag` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '刪除標識0-正常,1-刪除',
  PRIMARY KEY (`integral_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '積分記錄表' ROW_FORMAT = COMPACT;

-- ----------------------------
-- Records of home_integral_log
-- ----------------------------
INSERT INTO `home_integral_log` VALUES (1, 4, '457848301915963392', '1', '1', 10, '簽到發放', '2020-07-31 18:23:27', NULL, 0);
INSERT INTO `home_integral_log` VALUES (12, 4, '457406012030681088', '1', '1', 10, '簽到發放', '2020-09-01 21:18:55', NULL, 0);
INSERT INTO `home_integral_log` VALUES (13, 4, '457406012030681088', '1', '1', 10, '簽到發放', '2020-09-02 21:18:55', NULL, 0);
INSERT INTO `home_integral_log` VALUES (14, 4, '457406012030681088', '1', '1', 10, '簽到發放', '2020-08-30 21:18:55', NULL, 0);

SET FOREIGN_KEY_CHECKS = 1;

 

sql語句 可直接測試

SELECT
    count( 1 )  as days
FROM
    (
    SELECT
        date_sub( a.create_time, INTERVAL 1 DAY ) signDate,
        ( @i := DATE_ADD( @i, INTERVAL - 1 DAY ) ) today 
    FROM
        ( SELECT create_time FROM home_integral_log WHERE m_id = 4 and integral_type=1 and del_flag=0   ORDER BY create_time DESC ) a
        INNER JOIN (
        SELECT
            @i := max( create_time ) AS signMax 
        FROM
            home_integral_log 
        WHERE
            m_id = 4 and integral_type=1 and del_flag=0
            AND (
                TO_DAYS( create_time ) = TO_DAYS(
                curdate()) 
                OR TO_DAYS( create_time ) = TO_DAYS( DATE_ADD( curdate(), INTERVAL - 1 DAY ) ) 
            ) 
        ) b 
    WHERE
        b.signMax IS NOT NULL 
        AND TO_DAYS(
        DATE_ADD( @i, INTERVAL - 1 DAY )) = TO_DAYS( date_sub( a.create_time, INTERVAL 1 DAY ) ) 
    ) c

 

原文鏈接:https://www.cnblogs.com/anye-15068156823/p/7272377.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM