Using max in combination with join

Posts   
 
    
Kris Nobels avatar
Posts: 118
Joined: 02-Apr-2008
# Posted on: 26-Mar-2010 11:53:00   

I have this select:

SELECT a.ID, a.Status_ID, a.Datum 
FROM heartbeat_status a, (SELECT Station_ID, MAX(datum) AS max_date FROM heartbeat_status GROUP BY Station_ID) b
WHERE a.Station_ID = b.Station_ID AND a.Datum = b.max_date;

How do you create something like this in llblgen.

Can someone help me out with this ?

Thanx

Walaa avatar
Walaa
Support Team
Posts: 14994
Joined: 21-Aug-2005
# Posted on: 26-Mar-2010 12:02:38   
Kris Nobels avatar
Posts: 118
Joined: 02-Apr-2008
# Posted on: 26-Mar-2010 13:05:51   

I have a problem with multiple contditions.

I need to use AND ... in the filter

                ResultsetFields fields = new ResultsetFields(2);
                fields.DefineField(HeartbeatStatusFields.Datum, 0);
                fields.DefineField(HeartbeatStatusFields.StatusId, 1);

                fields[1].ExpressionToApply = new DbFunctionCall("MAX", new object[] { HeartbeatStatusFields.Datum });

                IGroupByCollection gcol = new GroupByCollection();
                gcol.Add(HeartbeatStatusFields.StationId);

                DerivedTableDefinition dtDefinition = new DerivedTableDefinition(fields, "b", null, gcol);

                IPredicate fillter = (new EntityField2(HeartbeatStatusFieldIndex.StationId.ToString(), "b", typeof(string)) == HeartbeatStatusFields.StationId.SetObjectAlias("a"));
                // IPredicate fillter2 = (new EntityField2(HeartbeatStatusFieldIndex.Datum.ToString(), "b", typeof(string)) == HeartbeatStatusFields.Datum.SetObjectAlias("a"));

                // specify the relation which is a dynamic relation. 
                DynamicRelation relation = new DynamicRelation(dtDefinition, JoinHint.Inner, EntityType.HeartbeatStatusEntity, "a", fillter);

                RelationPredicateBucket bucket = new RelationPredicateBucket();
                bucket.Relations.Add(relation);

                bucket.SelectListAlias = "a";  // entities should target the aliased order table.

                // fetch the data
                EntityCollection<HeartbeatStatusEntity> heartbeats = new EntityCollection<HeartbeatStatusEntity>();
                adapter.FetchEntityCollection(heartbeats, bucket);


How do i add the code piece AND a.Datum = b.max_date from the select above in the llblgen code ?

daelmo avatar
daelmo
Support Team
Posts: 8245
Joined: 28-Nov-2005
# Posted on: 26-Mar-2010 20:16:05   
IPredicateExpression fillter = new PredicateExpression();

filter.Add(new EntityField2(HeartbeatStatusFieldIndex.StationId.ToString(), "b", typeof(string)) == HeartbeatStatusFields.StationId.SetObjectAlias("a"));
filter.Add(new EntityField2(HeartbeatStatusFieldIndex.Datum.ToString(), "b", typeof(string)) == HeartbeatStatusFields.Datum.SetObjectAlias("a"));
David Elizondo | LLBLGen Support Team