我想连续数天计算特定用户在指定日期和之前开会。MySQL在正常表格中连续N天计数
例如:数连续天会议,与ID 1用户有在1月16日2013年
我发现了一些很好的答案here和here但表不正常的形式就像我的样品上方和我无法弄清楚如何为我的场合实施它。
一个样本表结构如下:
CREATE TABLE IF NOT EXISTS `meetings` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`time` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `meetings_users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
`meeting_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `meeting_id` (`meeting_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Constraints for table `meetings_users`
--
ALTER TABLE `meetings_users`
ADD CONSTRAINT `meetings_users_ibfk_2` FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `meetings_users_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
样品插入
INSERT INTO `users` (`id`) VALUES (1)
INSERT INTO `meetings` (`id`, `time`) VALUES
(1, '2013-01-14 10:00:00'),
(2, '2013-01-15 10:00:00'),
(3, '2013-01-16 10:00:00')
INSERT INTO `meetings_users` (`id`, `meeting_id`, `user_id`) VALUES
(1, 1, 1),
(2, 2, 1),
(3, 3, 1)
所需的输出:
*+---------+-----------------+
| user_id | consecutive_days |
+---------+------------------+
| 1 | 3 |
+---------+------------------+
考虑上述提供适当的DDL,包括一些插入和期望的结果。 – Strawberry
已编辑,现在好多了? –
更好?是的,但它仍然不是真正具有代表性的!来吧,给我们多一点点... – Strawberry