如何在限制使用SQL选择*时获取唯一值

如何在限制使用SQL选择*时获取唯一值,sql,unique,Sql,Unique,我有一张表,每30秒就有一条新记录。我需要知道每个用户的最新记录和时间戳值 我编写了以下查询: select created_user, MAX(created_date) from gisadmin.FORESTRY_LOCATIONLOG_vw Group by created_user 这正是我想要的。问题是,我需要将其输入到select语句的预定义部分的应用程序(试图提供帮助) 因此,必须启动查询 select * from gisadmin.FORESTRY_LOCATIONLOG

我有一张表,每30秒就有一条新记录。我需要知道每个用户的最新记录和时间戳值

我编写了以下查询:

select created_user,  MAX(created_date)
from gisadmin.FORESTRY_LOCATIONLOG_vw
Group by created_user
这正是我想要的。问题是,我需要将其输入到select语句的预定义部分的应用程序(试图提供帮助)

因此,必须启动查询

select * from gisadmin.FORESTRY_LOCATIONLOG_vw WHERE

有人对如何实现这一点有想法吗?

这里有一个快速解决方案:将其用作子查询

select created_user,  MAX(created_date)
from 
(
select * from gisadmin.FORESTRY_LOCATIONLOG_vw WHERE 1=1 //append this
)
Group by created_user
请注意,我添加了
1=1
,它将始终计算为true以处理
Where
子句

select * 
from gisadmin.FORESTRY_LOCATIONLOG_vw
WHERE (something that returns no records)
忽略第一个查询返回的任何内容,然后做自己的事情

select created_user,  MAX(created_date)
from gisadmin.FORESTRY_LOCATIONLOG_vw
Group by created_user

您可以使用
EXISTS

SELECT * 
FROM gisadmin.FORESTRY_LOCATIONLOG_vw
WHERE EXISTS (SELECT * 
              FROM  (SELECT created_user,  MAX(created_date)'created_date'
                     FROM gisadmin.FORESTRY_LOCATIONLOG_vw
                     GROUP BY created_user) b
              WHERE gisadmin.FORESTRY_LOCATIONLOG_vw.created_user = b.created_user
                 AND gisadmin.FORESTRY_LOCATIONLOG_vw.created_date = b.created_date)

重写你的应用程序。它不应该限制你。否则,您将很难处理所有查询:)这并不总是一个可行的选项(事实上,它几乎从来都不是…)这是一款现成的软件,不能进行重写op是否希望他的查询作为起点而不是子查询?select*from gisadmin.FORESTRY\u LOCATIONLOG\u vw必须作为起点,并且不能更改,因为在应用程序中无法更改,它是硬编码的。@user1074006所以您不能编写和运行SQL?我认为您需要进一步澄清您的问题,并解释您的环境select*from gisadmin.FREESTY\u LOCATIONLOG\u vw WHERE必须是起点,不能更改,因为应用程序中无法更改它,它是硬编码的。@user1074006如果您只定义一个WHERE语句而不返回任何记录,忽略查询的这一部分,然后只运行一个单独的查询?可能是两者的联合?您需要确保从底部查询中提取相同的列集此返回897条记录,我希望结果是2条记录,因为我现在只有2个用户访问此表。这很奇怪,2个用户有897条记录?它对我的测试数据有效。记录是否都具有相同的用户/日期组合?如果是这样的话,还有其他字段可以用来区分吗?你是对的,created_date字段有重复的值,幸运的是,还有其他的日期戳字段我可以使用!!非常感谢。