SQL坚持使用这个
我需要从只有一行具有该ID的表中选择行 示例表,包含两列。 第一个ID和时间戳。 所以第一行是ID 1,时间戳是01/01/2013SQL坚持使用这个,sql,db2,Sql,Db2,我需要从只有一行具有该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的记录,因为它们都只有一行 然后,如果这些行的时间戳超过一个月,我只需要返回它们。时间戳的格式
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的记录,因为它们都只有一行
然后,如果这些行的时间戳超过一个月,我只需要返回它们。时间戳的格式为2012-11-12-22.00.15.541231
有人能帮忙吗?这应该适合您:
SELECT *
FROM mytable
WHERE id NOT IN (
SELECT id
FROM mytable
GROUP BY id
HAVING COUNT(*) > 1
) AND time_created < current_timestamp - 1 month
您可以为此输出使用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
这样的办法应该行得通
select id
from yourtable
where timestampfield <= current timestamp - 1 month
group by id
having count(*) = 1
负1个月的部分来自
MySQL 5.5.30架构设置:
问题1:
:
如果只需要返回ID和时间戳,可以避免使用子查询,如下所示:
SELECT ID, MAX(Timestamp) AS Timestamp
FROM atable
GROUP BY ID
HAVING COUNT(*) = 1
AND MAX(Timestamp) < CURRENT TIMESTAMP - 1 MONTH
;
您正在使用哪个数据库?isqlquery标记建议SQL Server时间戳列是什么类型?只是查询DB2表,而不是SQL Server错误标记抱歉!按count1=1的ID从表_name group中选择ID;它位于SQL Server中。但是你可以参考逻辑。@Luv我想你不在子句中。使用not in时,您必须对所需的输出使用count*>1。不,不使用时大于1。当usedOP还需要另一个条件时,它将是=1。时间戳约束在这个问题的第一次修订中不存在。补充。时间检查应该是它应该首先检查计数,而这个问题后的日期条件与此无关MySQL@mvp:只是想展示一下方法。我想这对于所有的数据库都很常见,当我研究这个问题时,没有与数据库相关的标记,所以我考虑了mysql。
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 |
SELECT ID, MAX(Timestamp) AS Timestamp
FROM atable
GROUP BY ID
HAVING COUNT(*) = 1
AND MAX(Timestamp) < CURRENT TIMESTAMP - 1 MONTH
;