1

我需要从只有一行具有该 ID 的表中选择行。

示例表,有两列。
ID优先和时间戳。
所以第一行是 ID 1,时间戳 01/01/2013

ID      Timestamp
1       01/01/2013
2       02/02/2013
3       04/02/2013
3       07/02/2013
4       20/03/2013

因此,对于这个表,我只想返回 ID 为 1、2、4 的记录,因为这些记录都只有 1 行。

然后,如果它们的时间戳超过一个月前,我只需要返回这些行。时间戳就是这种格式2012-11-12-22.00.15.541231

有人可以帮忙吗?

4

5 回答 5

3

这应该适合你:

SELECT *
FROM mytable
WHERE id NOT IN (
    SELECT id
    FROM mytable
    GROUP BY id
    HAVING COUNT(*) > 1
) AND time_created < current_timestamp - 1 month
于 2013-06-03T09:52:20.987 回答
0

您可以group by为此输出使用子句 -

编辑

在日期戳列上添加条件

SELECT *
  FROM Your_Table_Name
 WHERE Id IN
       (SELECT Id FROM Your_Table_Name GROUP BY Id HAVING COUNT(*) = 1)
 AND time_created < current_timestamp - 1 month
于 2013-06-03T09:55:01.187 回答
0

像这样的东西应该工作。

select id
from yourtable
where timestampfield <= current timestamp - 1 month
group by id
having count(*) = 1

负 1 个月的部分来自这里

于 2013-06-03T09:56:48.290 回答
0

SQL小提琴

MySQL 5.5.30 架构设置

CREATE TABLE Table1
    (`ID` int, `Timestamp` date)
;

INSERT INTO Table1
    (`ID`, `Timestamp`)
VALUES
    (1, '2013-01-01'),
    (2, '2013-02-02'),
    (3, '2013-04-02'),
    (3, '2013-07-02'),
    (4, '2013-03-20')
;

查询 1

select ID,Timestamp
from Table1
where DATEDIFF(curdate(),DATE_SUB(Timestamp,INTERVAL 1 MONTH))>=1
group by ID
having count(ID)=1

结果

| ID |                       TIMESTAMP |
----------------------------------------
|  1 |  January, 01 2013 00:00:00+0000 |
|  2 | February, 02 2013 00:00:00+0000 |
|  4 |    March, 20 2013 00:00:00+0000 |
于 2013-06-03T09:59:30.553 回答
0

如果您只需要返回 ID 和时间戳,则可以避免使用子查询,如下所示:

SELECT ID, MAX(Timestamp) AS Timestamp
FROM atable
GROUP BY ID
HAVING COUNT(*) = 1
   AND MAX(Timestamp) < CURRENT TIMESTAMP - 1 MONTH
;
于 2013-06-03T10:11:49.553 回答