Avance 4

  Avances: 

  • Se hizo la consulta # 2 del administrador, la cual consistia en mostrar una tabla en la página web de aquellas cuentas que cumplan alguna de las siguientes condiciones: (1) exceso de operaciones en cajeros automaticos o (2) que hayan hecho operaciones ATM al menos 5 veces en los últimos N días donde N es un número dado por el usuario en la página web. Para lograr hacer esta consulta, se decidio iterar entre todas las cuentas existentes en la pagina web y despues llamar al SP que se hizo para esta consulta. Este SP, llamado ConsultaAdmin2, lo que hace es devolver la informacion que se pide en la plantilla del proyecto si la cuenta cumple con alguna de las dos condiciones establecidas. Para determinar si la primera condicion se cumple se determina si existe un movimiento del Id 10 (multa por exceso de operaciones en atm) y si existe entonces la primera condicion se cumple, de lo contrario no se cumple. Para determinar la segunda condicion, se obtienen la cantidad de filas de la tabla movimientos en las que el tipo de movimiento es igual a 6 y la fecha de inicio es mayor o igual a la fecha final. Despues de verificar las condiciones, se obtiene el promedio de operaciones por mes, el mes en el que hubo mayor cantidad de operaciones y el año en que hubo mayor cantidad de operaciones.

Horas Trabajadas: 7 h

Problemas encontrados y como fueron resueltos: 

  • Uno de los primeros problemas, fue que no se sabía como se podía restarle a una variable de tipo date una cantidad entera. Esto se necesitaba porque se ocupaba determinar la fehca en la que se debia terminar de contar operaciones. Para solucionar este problema se busco en internet como restar 5 días de una fecha de tipo date, mientras se hacía esto se encontró con la función DATEADD() la cual se vio en la referencia 6 y 7. Al leer esto, se encontró la manera de restarle un número entero de días a una variable date.
  • Mientras se intentaba buscar el mes con mayor cantidad de operaciones surgió el siguiente error: Column 'dbo.Movimiento.Id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. Se investigó en internet de que se trataba el problema (referencia 18) y se entendió que era lo que estaba ocurriendo y por ende no se podía usar el group by por el momento.
  • Uno de los principales retos, fue determinar el mes y el año con mayor cantidad de operciones. Esto debido a que se podía obtener las veces que aparecía un año en una columna o se podía obtener solo la cantidad de apariciones pero no el mes ni el año o también ocurría que se obtenían todas las veces que aparecía un año o mes pero no se lograba obtener la mayor cantidad. Se intentaba hacer un select from de otro select pero esto no daba el resultado que se deseaba. También se intento usar dentro de la función MAX() un select (referencia 19) pero esto no dio resultado. Se pasó como una hora investigando distintas cosas como obtener el valor más frecuentado en una tabla (referencia 20-23), uso de la función max (referencia 24) y otras cosas. Al final, con una serie de combinaciones de los temas investigados se logró obtener el resultado que se deseaba.

Temas Adicionales Investigados:
  • Como seleccionar filas de una columna hasta otra. Esto se investigó para lograr determinar como verificiar la primera condicion de la consulta. (Referencia 1 y 2)
  • Seleccionar las ultimas 5 filas de una tabla según una fecha, se investigó mientras se buscaba una manera de hacer la consulta 2. (Referencia 3
  • Como obtener la ultima fila de una tabla, se buscó mientras se intentaba validar la segunda condicion de la consulta. (Referencia 4)
  • Funcion DATEDIFF(), se investigó para determinar si iba a ser útil para comprobar la segunda condición. (Referencia 5)
  • Como usar la funcion DATEADD con una variable. (Referencia 8)
  • Como comparar dos fechas en sql. Se buscó para determinar cuando se debía parar de evaluar fechas. (Referencia 9)
  • Se intentó buscar la manera de obtener los meses de una tabla con datetime por lo que se leyó un poco sobre los tipos de datos y funciones de fecha y hora en sql (Referencia 10-12). Sin embargo, esta idea no llevó a ninguna solución.
  • Se investigó como obtener los meses de una tabla con más filas y con más operaciones. Con esta busqueda se leyeron varias páginas las cuales no aportaron mucho a la solución de la consulta 2. (Referencia 13-15)
  • Se intentó buscar también alguna forma de obtener el año con mayor cantidad de operaciones en una tabla, se encontró la referencia 16 pero tampoco aportó información relevante.
  • Se investigó Group By porque se tenía la idea de que esto iba a funcionar para lograr obtener los meses con mayor operaciones. (Referencia 17)
  • Se investigaron varios tipos de funciones en sql como Select top, limit, fetch first, count, avg, sum, min y max para poder encontrar la manera de obtener el mes y año con mayor cantidad de apariciones. (Referencia 25-28)
  • Como usar el resultado de un select en otro select, esto se investigo para obtener el mes con mayor cantidad de operaciones ya que se tenía un select que devolvía una tabla con la cantidad de apariciones de todos los meses y se quería seleccionar el mes con mayor cantidad. (Referencia 29 y 30)
Referencias Bibliograficas:
  1. https://stackoverflow.com/questions/58476588/select-rows-in-one-table-based-on-column-values-in-another-table´
  2. https://stackoverflow.com/questions/4156011/how-to-select-rows-for-a-specific-date-ignoring-time-in-sql-server
  3. https://stackoverflow.com/questions/2411559/how-do-i-query-sql-for-a-latest-record-date-for-each-user
  4. https://stackoverflow.com/questions/5191503/how-to-select-the-last-record-of-a-table-in-sql
  5. https://www.w3schools.com/sql/func_sqlserver_datediff.asp
  6. https://www.mssqltips.com/sqlservertip/2509/add-and-subtract-dates-using-dateadd-in-sql-server/
  7. https://www.w3schools.com/sql/func_sqlserver_dateadd.asp
  8. https://stackoverflow.com/questions/36478564/sql-dateadd-with-variable
  9. https://www.geeksforgeeks.org/sql-query-to-compare-two-dates/#:~:text=This%20can%20be%20easily%20done,using%20the%20IF%2DELSE%20statement.
  10. https://docs.microsoft.com/es-es/sql/t-sql/functions/date-and-time-data-types-and-functions-transact-sql?view=sql-server-ver15
  11. https://www.w3schools.com/sql/func_sqlserver_datefromparts.asp
  12. https://www.w3schools.com/sql/func_sqlserver_month.asp
  13. https://stackoverflow.com/questions/48548611/select-month-w-most-days-in-multi-month-range-in-sql
  14. https://dba.stackexchange.com/questions/206128/select-records-by-a-particular-month-wise-in-sql
  15. https://www.codegrepper.com/code-examples/sql/sql+count+rows+by+month
  16. https://www.sqlshack.com/track-history-data-changes-using-sql-server-2016-system-versioned-temporal-tables/
  17. https://www.w3schools.com/sql/sql_groupby.asp
  18. https://stackoverflow.com/questions/13999817/reason-for-column-is-invalid-in-the-select-list-because-it-is-not-contained-in-e
  19. https://stackoverflow.com/questions/62053239/how-to-use-select-query-inside-max-function
  20. https://www.codegrepper.com/code-examples/sql/sql+query+to+get+count+of+records+per+month
  21. https://www.py4u.net/discuss/782445
  22. https://stackoverflow.com/questions/48590268/pandas-get-the-most-frequent-values-of-a-column
  23. https://stackoverflow.com/questions/56219720/how-to-find-most-frequent-value-in-sql-column-and-return-that-value
  24. https://www.sqlshack.com/sql-server-max-aggregate-function/
  25. https://www.w3schools.com/sql/sql_top.asp
  26. https://www.w3schools.com/sql/sql_count_avg_sum.asp
  27. https://www.w3schools.com/sql/sql_min_max.asp
  28. http://www-db.deis.unibo.it/courses/TW/DOCS/w3schools/sql/sql_func_first.asp.html
  29. https://stackoverflow.com/questions/21274039/how-to-use-the-result-of-a-select-statement-as-a-column-of-another-select-statem/21276543
  30. https://stackoverflow.com/questions/39873782/selecting-the-column-names-for-another-select-possible
Comunicaciones con el profesor:

+ Se le preguntó si la página web debía mostrar los movimientos de las cuentas objetivo, debido a que no se había hecho y en la plantilla no venía pero se quería estar 100% seguras.








+ Se le indicó al profesor que los datos que se tenían no cumplían ninguna de las condiciones para probar el funcionamiento de la consulta numero 2.











Código realizado: SP para la consulta numero dos del administrador











Comments

Popular posts from this blog

Avance 2

Avance 5

Resumen Proyecto 2