Solved

Hive / SQL select last item from values separated by commas

Posted on 2013-10-30
5
1,234 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 40

Accepted Solution

by:
Kyle Abrahams earned 500 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 28

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 40

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 40

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

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

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

Suggested Solutions

If you find yourself in this situation “I have used SELECT DISTINCT but I’m getting duplicates” then I'm sorry to say you are using the wrong SQL technique as it only does one thing which is: produces whole rows that are unique. If the results you a…
Occasionally there is a need to clean table columns, especially if you have inherited legacy data. There are obviously many ways to accomplish that, including elaborate UPDATE queries with anywhere from one to numerous REPLACE functions (even within…
Learn how to create flexible layouts using relative units in CSS.  New relative units added in CSS3 include vw(viewports width), vh(viewports height), vmin(minimum of viewports height and width), and vmax (maximum of viewports height and width).
Both in life and business – not all partnerships are created equal. As the demand for cloud services increases, so do the number of self-proclaimed cloud partners. Asking the right questions up front in the partnership, will enable both parties …

895 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

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now