我正在运行以下Hive查询(MapR版本0.12):
SELECT A.ID, A.AMT1, A.AMT2
FROM (
SELECT ID as ID, NET_AMOUNT as AMT1
FROM TEST_TABLE
WHERE DATE_BY >='2012-10-01' AND DATE_BY <='2012-10-31') as q
JOIN (
SELECT ID as ID, NET_AMOUNT as AMT2
FROM TEST_TABLE
WHERE DATE_BY >='2013-10-01' AND DATE_BY <='2013-10-31') as r
ON q.ID=r.ID ) A
但是我收到了这个错误:
错误:失败:ParseException第2:2行无法识别附近的&#39;(&#39;&#39; SELECT&#39;&#39; ID&#39;在子查询中源
答案 0 :(得分:0)
您需要使用cast('your date' as date)
将日期作为日期进行比较,因为它当前是一个字符串。
这可能无法解决您的问题,因此请在尝试后编辑您的问题。
答案 1 :(得分:0)
您的查询似乎存在一些问题,我认为应该是这样的:
SELECT q.ID,q.AMT1,q.AMT2 FROM
(SELECT ID as ID, NET_AMOUNT as AMT1 FROM TEST_TABLE WHERE DATE_BY >='2012-10-01' AND DATE_BY <='2012-10-31') q
JOIN (SELECT ID as ID ,NET_AMOUNT as AMT2 FROM TEST_TABLE WHERE DATE_BY >='2013-10-01' AND DATE_BY <='2013-10-31') r
on (q.ID=r.ID )
但是当你正在比较日期时,正如@Antariksha所说,你需要施展它。 但我更喜欢更好的选择,比较时间戳格式的DATE。因此,在这种情况下,您的查询将如下所示:
SELECT q.ID,q.AMT1,q.AMT2 FROM
(SELECT ID as ID, NET_AMOUNT as AMT1 FROM TEST_TABLE WHERE unix_timestamp(DATE_BY,"<your date patern>") >=unix_timestamp('2012-10-01',"YYYY-MM-DD") AND unix_timestamp(DATE_BY,"<your date patern>") <=unix_timestamp('2012-10-31',"YYYY-MM-DD")) q
JOIN (SELECT ID as ID ,NET_AMOUNT as AMT2 FROM TEST_TABLE WHERE unix_timestamp(DATE_BY,"<your date patern>") >=unix_timestamp('2013-10-01',"YYYY-MM-DD") AND unix_timestamp(DATE_BY,"<your date patern>") <=unix_timestamp('2013-10-31',"YYYY-MM-DD")) r
on (q.ID=r.ID )
希望它有所帮助...... !!!