?
Solved

Hive / SQL select last item from values separated by commas

Posted on 2013-10-30
5
Medium Priority
?
1,648 Views
Last Modified: 2013-11-04
I've got a field that holds values separated by commas.  How can i get the *LAST* value from the list?

---------------------------
|    Example_Field   |
---------------------------
[apple, orange, pear]
[apple, pear]    
[pear, pear, apple]
[orange]
---------------------------

I want a select query to return the last value from each list:
pear
pear
apple
orange

So:
Select SpecialFunctionToGetLastVal(Example_Field) as LastFruit from Table

Open in new window


This is for a hive query, but i'll cross that bridge when i come to it.  Is there some generic function or method in SQL to do this?

Thanks in advance
0
Comment
Question by:ducky801
5 Comments
 
LVL 41

Accepted Solution

by:
Kyle Abrahams earned 2000 total points
ID: 39612513
this should do it for you:

select substring(
                          Example_Field,
                                    len(Example_Field) - charindex(',', reverse(Example_Field)) + 2,
                                    charindex(',', reverse(Example_Field)))


note that if your values are seperated by the ', ' then you would use a ' ' instead of ',' in the query (2 replacements).
0
 
LVL 29

Expert Comment

by:sammySeltzer
ID: 39612516
Sorry this is wrong. - my first solution  that is.

How about this?

DECLARE @LastVAR NVARCHAR(100)
DECLARE MYTESTCURSOR CURSOR
DYNAMIC 
FOR
SELECT Example_Field as lastItem FROM yourtable
OPEN MYTESTCURSOR
FETCH LAST FROM MYTESTCURSOR INTO @LastVAR 
CLOSE MYTESTCURSOR
DEALLOCATE MYTESTCURSOR
SELECT @LastVAR 

Open in new window


OR

set rowcount 1
 
select * from yourtable order by id desc

Open in new window

0
 
LVL 32

Expert Comment

by:awking00
ID: 39614755
I'm not very familiar with Hive, but I do know it has string functions for reverse(), instr(), trim(), replace(), and substr() from which you could create a user_defined function. In pseudo code, something like the following:
if instr(field,',') = 0 then field
else
reverse(field)
find first position of reversed field using instr(reverse(field),',')
substr(reverse(field),1, instr(reverse(field),',')
replace the ',' from above, then trim the result
and finally reverse that.
Sorry I couldn't be more specific but I hope this might help.
0
 
LVL 41

Expert Comment

by:Sharath
ID: 39618478
Is it a STRING or ARRAY data type? And do you have open and closing brackets also as part of the string?
0
 
LVL 41

Expert Comment

by:Sharath
ID: 39618482
try this.

SELECT reverse(sentences(reverse(your_column))[0][0]) FROM your_table

tested on my machine and it returned the last element.

select reverse(sentences(reverse('abc,def,ghi'))[0][0]) from default.dual
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

PL/SQL can be a very powerful tool for working directly with database tables. Being able to loop will allow you to perform more complex operations, but can be a little tricky to write correctly. This article will provide examples of basic loops alon…
Sometimes MS breaks things just for fun... In Access 2003, only the maximum allowable SQL string length could cause problems as you built a recordset. Now, when using string data in a WHERE clause, the 'identifier' maximum is 128 characters. So, …
Whether it be Exchange Server Crash Issues, Dirty Shutdown Errors or Failed to mount error, Stellar Phoenix Mailbox Exchange Recovery has always got your back. With the help of its easy to understand user interface and 3 simple steps recovery proced…
With just a little bit of  SQL and VBA, many doors open to cool things like synchronize a list box to display data relevant to other information on a form.  If you have never written code or looked at an SQL statement before, no problem! ...  give i…
Suggested Courses

850 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question