That is not necessary, because an untyped simple element will atomize as xs:untypedAtomic and then sort as a string. The string representation of an xs:dateTime orders exactly like an xs:dateTime.
Try it. -- Mike On 2 Oct 2014, at 09:34 , Joe Bryan <joe.br...@marklogic.com> wrote: > Hi Rachel, > > The order by clause is type-aware. You example orders by the data() value of > the provided element (which will be xs:string unless a schema is in scope). > You should construct an xs:dateTime and order by that: > > order by xs:dateTime($x/publicationDateTime) > > It's also worth noting that map:map is an unordered collection of entries. > You can use a json:array instead if you need to preserve the order of your > collection. > > Thanks. > > -jb > > From: Rachel Wilson <rachel.wil...@bbc.co.uk> > Reply-To: MarkLogic Developer Discussion <general@developer.marklogic.com> > Date: Thursday, October 2, 2014 at 12:17 PM > To: MarkLogic Developer Discussion <general@developer.marklogic.com> > Subject: [MarkLogic Dev General] order by clause ignored? > > I realise this is more of an xquery question but everyone here is stumped :-s > > I have a query that is trying to calculate some earliest and latest dates > that an event occurred. The events are represented in xml like this: > > <publication> > <publicationDateTime>2013-08-14T15:06:51.921302Z</publicationDateTime> > <documents> > <document> > <id>b119c2a3-5436-59d2-9771-a67f8e2b4172</id> > <version>1</version> > </document> > </documents> > </publication> > > There are two events for the this particular document (i.e. with the same > document id), and therefore two publication documents on different days. In > order to work out the first and last dates I'm sorting all my publication > docs by publication date, then taking the sorted publication documents in > order I'm iterating through the publication document ids in order and > remembering them in the correct maps for earliest seen and latest seen dates. > However the results in the map are as if the publication documents are > coming out in document order. > > If I run this query the document dates are coming out in the right order as > I'd expect: > ------------------------------------------------------------------ > let $earliestPubDates := map:map() > let $latestPubDates := map:map() > let $buildMaps := > for $x in doc()/publication > let $publishedDate := $x/publicationDateTime/string() > let $documents := $x/documents/document > order by $x/publicationDateTime > return > (: map building stuff commented out in order to see how the dates are > being ordered :) > $publishedDate > > return $buildMaps > --------------------------------------------------------------------- > returns: > 2013-08-14T15:06:51.921302Z > 2014-09-03T14:46:07.757612Z > > > > However, after someone showed me how to debug the loop a little with an error > statement, I'm finding that the first publication processed is the later one, > not the earlier one. It looks like the order by in this case is being > ignored. Could someone tell me how and why? > > > > ---------------------------------------------------------------------------- > let $earliestPubDates := map:map() > let $latestPubDates := map:map() > > let $buildMaps := > for $x in doc()/publication > let $documents := $x/documents/document > order by $x/publicationDateTime > return > for $contentId in $documents/id/string() > let $publishedDate := $x/publicationDateTime/string() > let $putEarliest := if (not(map:contains($earliestPubDates, > $contentId))) then ( > let $dummy := map:put($earliestPubDates, > $contentId, $x/publicationDateTime) > let $a := error("Adding earliest published date > " || $x/publicationDateTime) > return $dummy > ) else () > let $putLatest := map:put($latestPubDates, $contentId, $publishedDate) > return () > > return $buildMaps > ---------------------------------- > Returns (in an error stack trace): "Adding earliest published date > 2014-09-03T14:46:07.757612Z" > > > Is it something to do with when the order by is applied to the statement? > > Any help gratefully received > Rachel > _______________________________________________ > General mailing list > General@developer.marklogic.com > http://developer.marklogic.com/mailman/listinfo/general _______________________________________________ General mailing list General@developer.marklogic.com http://developer.marklogic.com/mailman/listinfo/general