Can't use just use a predicate that returns the first element in the sorted sequence? Something like:

  let $seq = for $job in doc('x.xml')//job
             order by
                xs:date(replace($job/StartDate,
                        "(\d{2})-(\d{2})-(\d{4})", "$3-$1-$2")
                       ) descending
             return $job
  return $seq[1]

(My apologies if the syntax isn't exact. I haven't written an XQuery for quite a while.)

-- Ron

On 11/2/2015 5:53 AM, sudheshna iyer wrote:
Thank you very much, Christian. Let me try this..



------------------------------------------------------------------------
*From:* Christian Grün <christian.gr...@gmail.com>
*To:* sudheshna iyer <sudheshnai...@yahoo.com>
*Cc:* "talk@x-query.com" <talk@x-query.com>
*Sent:* Sunday, November 1, 2015 4:26 PM
*Subject:* Re: [xquery-talk] Xquery : Sort and get only the first record

If your XQuery processor supports XQuery Update, this would be one solution:

   copy $xml := doc('x.xml')
   modify (
     delete node subsequence(
       for $job in $xml//job
       order by xs:date(replace($job/StartDate,
         "(\d{2})-(\d{2})-(\d{4})", "$3-$1-$2")
       ) descending
       return $job
     , 2)
   )
   return $xml

Best,
Christian




On Sun, Nov 1, 2015 at 8:51 PM, sudheshna iyer <sudheshnai...@yahoo.com
<mailto:sudheshnai...@yahoo.com>> wrote:
 > Team,
 >
 > I have an xml which has multiple jobs elements. I want to sort the
jobs and
 > want to output only the latest job. Note that <EndDate> can be empty
 > indicating that it is the current job.
 >
 > Basically I want to order by jobs/job/EndDate in descending fashion and
 > select only the first record..
 >
 > How do I do that using xquery?
 >
 > Input request:
 > <?xml version="1.0" encoding="UTF-8"?>
 > <Request>
 >  <SessionInfo>
 >      <uid>qq</uid>
 >      <pwd>qq</pwd>
 >  </SessionInfo>
 >  <Param>
 >      <CustomerInfo>
 >        <Contact>
 >            <Number>123</Number>
 >            <Name>aaa bbb</Name>
 >            <Jobs>
 >              <job>
 >                  <Name>Analyst</Name>
 >                  <Id>1</Id>
 >                  <StartDate>01-01-2015</StartDate>
 >                  <EndDate>08-30-2015</EndDate>
 >              </job>
 >              <job>
 >                  <Name>Programmer</Name>
 >                  <Id>2</Id>
 >                  <StartDate>08-31-2015</StartDate>
 >                  <EndDate />
 >              </job>
 >            </Jobs>
 >        </Contact>
 >      </CustomerInfo>
 >  </Param>
 > </Request>
 >
 > Expected output:
 >
 > <?xml version="1.0" encoding="UTF-8"?>
 > <Request>
 >  <SessionInfo>
 >      <uid>qq</uid>
 >      <pwd>qq</pwd>
 >  </SessionInfo>
 >  <Param>
 >      <CustomerInfo>
 >        <Contact>
 >            <Number>123</Number>
 >            <Name>aaa bbb</Name>
 >            <Jobs>
 >              <job>
 >                  <Name>Programmer</Name>
 >                  <Id>2</Id>
 >                  <StartDate>08-31-2015</StartDate>
 >                  <EndDate/>
 >              </job>
 >            </Jobs>
 >        </Contact>
 >      </CustomerInfo>
 >  </Param>
 > </Request>
 >
 > Your help is greatly appreciated.

 >
 >
 >
 >
 > _______________________________________________
 > talk@x-query.com <mailto:talk@x-query.com>
 > http://x-query.com/mailman/listinfo/talk





_______________________________________________
talk@x-query.com
http://x-query.com/mailman/listinfo/talk


---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

_______________________________________________
talk@x-query.com
http://x-query.com/mailman/listinfo/talk

Reply via email to