Ah, sorry, I may have flipped the question you are actually asking. Let's back up. Are you asking:
1) For a given user, over a given date range, give me the values for each day in that range? 2) For a given user, over a given date range, give me a single number, the sum over the entire range? Or do you want to do the above, but keyed first by date and 2nd by user. -Mike On Dec 29, 2010, at 9:13 AM, Warner Onstine wrote: > I'm pretty sure that's what I'm doing already in my search. So, not > clear on how it's any different. > > Here's one of my query strings for an example (that returns these results): > _design/playerassignmentcompletion/_view/topAssignmentsByDate?startkey=%5B2010%2C11%2C1%5D&endkey=%5B2010%2C11%2C29%5D&group=true > > which translates to > year = 2010 > month = dec (or 11) > day = 1 .. today's date > > I am not querying on the playerid, but I need to sum up by the player > id (the last column). > > -warner > > On Wed, Dec 29, 2010 at 10:01 AM, Michael Miller <[email protected]> wrote: >> Not sure if you got a reply yet, but if you have keys like: >> >>> [2010, 11, 28, "fb45ffc66ad8f4f299f0bd06a3000903"] 10 <--- player 1 >>> [2010, 11, 26, "fb45ffc66ad8f4f299f0bd06a3001c32"] 35 <--- player 2 >>> [2010, 11, 26, "fb45ffc66ad8f4f299f0bd06a3000ccf"] 55 <--- player 3 >>> [2010, 11, 26, "fb45ffc66ad8f4f299f0bd06a3000903"] 75 <--- player 1 >>> (again) >> >> Can't you just aggregate over users for a given date range via (bash >> escaping): >> >> GET '...?startkey=\[2010,11,28\]&endkey=\[2010,11,24\]&group_level=3' >> >> Also, you'll get better performance by swapping your reduce function for the >> simple builtin '_sum'. That is, just literally replace your js code with >> '_sum'. >> >> -M >> >> On Dec 29, 2010, at 7:10 AM, Warner Onstine wrote: >> >>> Hi all, I've been trying to figure out the best way to implement this >>> particular view/reduce and have been having some issues. >>> >>> Let me explain the structure a bit and what I've done. >>> >>> I have a set of documents for storing a player's assignment completion >>> which contains a point value. I want to query for a given date range >>> for those completions and aggregate the points values. Here is the >>> view and the reduce I came up with : >>> >>> map: >>> function(doc) { >>> if (doc.type == 'playerassignmentcompletion' && doc.approved == true) { >>> var completionDate = new Date(doc.completionDate); >>> var completionYear = completionDate.getFullYear(); >>> var completionMonth = completionDate.getMonth(); >>> var completionDay = completionDate.getDate(); >>> emit([ >>> completionYear, >>> completionMonth, >>> completionDay, >>> doc.playerId >>> ], doc.pointsEarned); >>> } >>> } >>> >>> reduce: >>> function(keys, values, rereduce) { >>> return sum(values); >>> } >>> >>> And then I say group=true >>> >>> I didn't realize my issue at the time because all of the completions I >>> had were for a given date. Now, I added a completion for a different >>> date and what happens is this kind of result: >>> [2010, 11, 28, "fb45ffc66ad8f4f299f0bd06a3000903"] 10 <--- player 1 >>> [2010, 11, 26, "fb45ffc66ad8f4f299f0bd06a3001c32"] 35 <--- player 2 >>> [2010, 11, 26, "fb45ffc66ad8f4f299f0bd06a3000ccf"] 55 <--- player 3 >>> [2010, 11, 26, "fb45ffc66ad8f4f299f0bd06a3000903"] 75 <--- player 1 >>> (again) >>> >>> What I want is to combine all the player's total scores, but with my >>> group=true, it is matching each of my keys exactly. I understand why >>> it's doing it, just not how to fix my key/query to work the way I want >>> it to. >>> >>> One thought I had was to move the id column up to the front so that I >>> could do group_level=1. But I don't know how to specify a wildcard >>> parameter so that I get all the documents with any key and just the >>> particular date range I want. >>> >>> Hopefully this is clear enough. I can share more information if it's >>> necessary (just don't want to bog the list down with too many >>> attachments). >>> >>> Thanks, it is greatly appreciated! >>> >>> -warner >> >>
