¡Hola César! He publicado tu comentario como pregunta ya que tendrá más visibilidad en la comunidad. Te contesto por aquí, lo que necesitas es habilitar para tu instalación de Apache el enrutamiento de todas las peticiones de ficheros que reciba, te copio aquí la URL de la documentación:

https://docs.intersystems.com/iris20231/csp/docbook/DocBook.UI.Page.cls?...

Entiendo que no debería haber ningún problema para invocar tantos BO como necesites, puedes verlo en nuestra documentación oficial: 

https://docs.intersystems.com/iris20243/csp/docbook/DocBook.UI.Page.cls?...

Yo particularmente no lo haría por no aumentar el acoplamiento del código, pero como ves en la documentación no hay problema por ello.

¡Hola Albert! Te agradecería que, para beneficio de todos los usuarios de la comunidad de desarrolladores en español, planteases la pregunta traducida al español si es posible.

Con respecto a tu pregunta, prueba con la siguiente query:

SELECT 
a1.ID, AVG(a1.Price)
FROM Comp.AlbLin a1
WHERE a1."Date" in (SELECT TOP 3 a2."Date" FROM Comp.AlbLin a2 WHERE a1.ID = a2.ID ORDER BY a2."Date" DESC )
GROUP BY a1.ID order by a1.ID asc

Entiendo que el campo AlbLin.ID no es único por lo que indicas, por lo que podemos utilizar como criterio la fecha del dato. Te explico un poco la query:

  1. Puedes ver como tenemos dentro del WHERE una subquery que nos extraerá las últimas 3 fechas para cada AlbLin.ID, serán las 3 últimas ya que hemos indicado TOP 3 de una query ordenada por fecha de forma descendiente, así que siempre serán las 3 últimas fechas.
  2. En la SELECT principal hemos sacado el AlbLin.ID que nos servirá como criterio agrupador y hemos usado la función agrupadora AVG para AlbLin.Price.
  3. En la instrucción GROUP BY hemos definido el campo agrupador AlbLin.ID y hemos añadido un ORDER BY, este último no es necesario.

Pues bien, la subquery nos devolverá las 3 últimas fechas que usaremos en la query principal para sólo utilizar aquellos registros relativos al AlbLin.ID que coincidan con esas fechas (la subquery usa dentro de su WHERE el identificador de la query principal).

Prueba la query y coméntanos el resultado.

Buenas Yone. Sospecho que quizás el problema pueda estar en la definición del objeto GetCursosAdmitidosResponse, según su definición tiene una propiedad cursos:

Property cursos As list Of EsquemasDatos.miFormacion.CursoAdmitido;

Pero lo que enviais para hacer el mapeo de json al objeto comienza así:

[
    {
        "codigo": "5128",
        "descripcion": "LAS ENFERMERAS FRENTE A LOS PROBLEMAS DE SALUD MENTAL",
        "programa": "Probabilidad de contagio ante un accidente hemático.",
        "admitido": 1,
        "desdefecha": "26/10/2022",
        "hastafecha": "26/10/2029",
        "cursohorario": [
            {
                "aula": "AULA 1",

Cuando debiera ser:

"cursos": [
            {
            "codigo": "5128",
            "descripcion": "LAS ENFERMERAS FRENTE A LOS PROBLEMAS DE SALUD MENTAL",
            "programa": "Probabilidad de contagio ante un accidente hemático.",
            "admitido": 1,
            "desdefecha": "26/10/2022",
            "hastafecha": "26/10/2029",
            "cursohorario": [
                {
                    "aula": "AULA 1",

Yo probaría modificando el JSON que estáis enviado para ver si es ese el problema.

Buenas Yone. Al ser tu collection una propiedad de otro elemento podrías usar el método Serialize para obtener el %String, luego sólo tendrías que añadir los corchetes al inicio y al final. Puedes ver la documentación al respecto en la siguiente URL: 

https://docs.intersystems.com/iris20201/csp/documatic/%25CSP.Documatic.c...