我正在尝试在'url'字段上执行select distinct,同时拉入其他几个字段的数据。我尝试了下面但它给了我一些错误消息'缺少表达'。我正在使用ORACLE。任何人都可以帮助我
SELECT distinct on url,
is_aw_grp_id,
is_aw_page_id,
eppcm_contentid
FROM ps_z_google_srch
WHERE url <> ' '
AND EPPCM_CONT_TYPE = 'H'
AND TO_CHAR (dttm_imported, 'dd-MON-yyyy HH:MM:SS') >=
(SELECT TO_CHAR (LASTCHANGEDTTM, 'dd-MON-yyyy HH:MM:SS')
FROM PS_Z_CONT_LAST_CHG
WHERE RECNAME = 'Z_GOOGLE_SRCH')
答案 0 :(得分:5)
&#39; on&#39;是一个关键字,导致抛出此错误;它使解析器感到困惑。它不是distinct
in Oracle所需要的或有效的(因为我相信它适用于PostgreSQL,所以也许是其他数据库),所以删除这个词:
SELECT distinct url,
is_aw_grp_id,
is_aw_page_id,
eppcm_contentid
...
这将获得这四个字段的所有不同的组合。假设您的网址显示在多行中,如果您只想显示每个网址,那么您需要确定其他三个字段所需的值 - 来自该网址的所有行 - 这可以通过聚合完成或分析函数或子查询,具体取决于数据和要求。
偏离主题,但这看起来很奇怪:
TO_CHAR (dttm_imported, 'dd-MON-yyyy HH:MM:SS') >=
(SELECT TO_CHAR (LASTCHANGEDTTM, 'dd-MON-yyyy HH:MM:SS')
...
您将两个日期转换为字符串,然后将它们与字符串语义进行比较;所以&#39; 01-MAR-2015&#39;将在#28; 28-FEB-2015&#39;之前进行排序,因为1在字符集中位于2之前。如果你要比较字符串,它们应该是比较有意义的形式,比如ISO格式。但是将它们转换成字符串无论如何都没有意义,只需将它们作为日期进行比较:
dttm_imported >= (SELECT LASTCHANGEDTTM
...
您也可以加入两个表而不是使用子查询。