我有一个存储用户登录信息的表。 表将用户的登录信息存储到特定系统。因此,当用户登录系统时,它会保存在我的表中,状态字段设置为1.
这是我的表结构:
CREATE TABLE IF NOT EXISTS `login_info` (
`id` int(11) NOT NULL,
`staffID` int(11) NOT NULL,
`logDate` date NOT NULL,
`status` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=latin1;
事情是,一些用户记录被复制,我试图避免它们。我的意思是,一些用户不止一次登录系统。因此,对于特定的一天,他们可能有多个记录,而在其他一天,如果他们根本没有登录,他们将没有任何记录。
我做了一个数据样本:
INSERT INTO `login_info` (`id`, `staffID`,`logDate`, `status`) VALUES
(1, 100, '2016-10-01',1),
(2, 100, '2016-10-01',1),
(3, 100, '2016-10-01',1),
(4, 101, '2016-10-01',1),
(5, 101, '2016-10-01',1),
(6, 102, '2016-10-01',1),
(7, 100, '2016-10-02',1),
(8, 101, '2016-10-02',1),
(9, 101, '2016-10-02',1),
(10, 102, '2016-10-02',1),
(11, 103, '2016-10-02',1),
(12, 100, '2016-10-03',1),
(13, 101, '2016-10-03',1),
(14, 102, '2016-10-03',1),
(15, 103, '2016-10-03',1),
(16, 100, '2016-10-04',1),
(17, 100, '2016-10-04',1),
(18, 102, '2016-10-04',1),
(19, 103, '2016-10-04',1);
您知道,身份100
在2016-10-01
上签了3次,身份103
的工作人员根本没有登录的人员。
我正在尝试每天获取不同的记录,这不是我想象的那样。
这是FIDDLE
我试过
select staffID from login_info WHERE logDate >= '2016-10-01' AND status=1;
和
select logDate from login_info WHERE logDate >= '2016-10-01' AND status=1;
这不是我想要的东西。
这就是我想要实现的目标:
id staffID logDate status
3 100 2016-10-01 1
5 101 2016-10-01 1
6 102 2016-10-01 1
7 100 2016-10-02 1
9 101 2016-10-02 1
10 102 2016-10-02 1
11 103 2016-10-02 1
12 100 2016-10-03 1
13 101 2016-10-03 1
14 102 2016-10-03 1
15 103 2016-10-03 1
17 100 2016-10-04 1
18 102 2016-10-04 1
19 103 2016-10-04 1
答案 0 :(得分:1)
以下是否适合您?
SELECT * FROM login_info
WHERE logDate >= '2016-10-02'
AND status=1
GROUP BY staffId, logDate
ORDER BY logDate;
如果您想加入2016-10-01
,则需要更改为logDate >= '2016-10-02
这里的重要部分是为每个用户提供每天数据的组。 Order by仅用于按照您想要的顺序返回数据