Tenemos una mesa preparada de la siguiente manera:¿Hay alguna solución establecida para este problema?
|ID|EmployeeID|Date |Category |Hours|
|1 |1 |1/1/2010 |Vacation Earned|2.0 |
|2 |2 |2/12/2010|Vacation Earned|3.0 |
|3 |1 |2/4/2010 |Vacation Used |1.0 |
|4 |2 |5/18/2010|Vacation Earned|2.0 |
|5 |2 |7/23/2010|Vacation Used |4.0 |
Las reglas de negocio son:
- equilibrio vacaciones se calcula vacaciones ganadas vacaciones menos utilizado.
- Las vacaciones utilizadas siempre se aplican primero a la cantidad ganada de vacaciones más antiguas.
Tenemos que devolver las filas de Vacation Earned que no han sido compensadas por las vacaciones utilizadas. Si las vacaciones utilizadas solo han compensado parte de un registro de vacaciones ganado, debemos devolver ese registro que muestra la diferencia. Por ejemplo, utilizando la tabla anterior, el conjunto de resultados se vería así:
|ID|EmployeeID|Date |Category |Hours|
|1 |1 |1/1/2010 |Vacation Earned|1.0 |
|4 |2 |5/18/2010|Vacation Earned|1.0 |
Tenga en cuenta que ficha 2 fue eliminado porque fue completamente compensado por el tiempo usado, pero los registros 1 y 4 se utilizaron sólo parcialmente, por lo que fueron calculado y devuelto como tal.
La única forma en que pensamos hacer esto es obtener todos los registros de vacaciones ganados en una tabla temporal. A continuación, obtenga el total de vacaciones utilizadas y recorra la tabla temporal, elimine el registro más antiguo y restando ese valor del total de vacaciones utilizadas hasta que el total de vacaciones utilizado sea cero. Podríamos limpiarlo cuando las vacaciones restantes sean solo parte del registro de vacaciones más antiguo. Esto nos dejaría solo con los sobresalientes registros de vacaciones ganadas.
Esto funciona, pero es muy ineficiente y funciona mal. Además, el rendimiento simplemente se degradará con el tiempo a medida que se agregan más y más registros.
¿Hay alguna sugerencia para una mejor solución, preferiblemente basada en la configuración? Si no, tendremos que ir con esto.
EDITAR: Esta es una base de datos de proveedores. No podemos modificar la estructura de la tabla de ninguna manera.
y of'course categoría no debe ser texto, pero alguna identificación de otra tabla ... –
Es, acabo de poner el texto en un esfuerzo por hacer el problema más claro. – NYSystemsAnalyst
+1 Intenté resolver este problema, y mi solución fue tan cercana a esta que no vale la pena publicarla. Creo que este es el enfoque correcto. –